From 3551e1ac1c3c9a9ddf6f90058ac2eed974a0b369 Mon Sep 17 00:00:00 2001
From: Andrew Randrianasulu <randrianasulu@gmail.com>
Date: Wed, 3 Jun 2026 15:20:45 +0300
Subject: [PATCH 1/4] Fix big endian sound output for alsa and pulseaudio ?

---
 cinelerra-5.1/cinelerra/audioalsa.C  | 14 ++++++++++----
 cinelerra-5.1/cinelerra/audiopulse.C |  9 ++++++---
 2 files changed, 16 insertions(+), 7 deletions(-)

diff --git a/cinelerra-5.1/cinelerra/audioalsa.C b/cinelerra-5.1/cinelerra/audioalsa.C
index 21fe8b1e..ee831747 100644
--- a/cinelerra-5.1/cinelerra/audioalsa.C
+++ b/cinelerra-5.1/cinelerra/audioalsa.C
@@ -178,13 +178,19 @@ void AudioALSA::translate_name(char *output, char *input, int mode)
 
 snd_pcm_format_t AudioALSA::translate_format(int format)
 {
-	switch(format)
-	{
+
+	if( BC_Resources::little_endian ) {
+	switch (format) {
 	case  8: return SND_PCM_FORMAT_S8;
 	case 16: return SND_PCM_FORMAT_S16_LE;
 	case 24: return SND_PCM_FORMAT_S24_LE;
-	case 32: return SND_PCM_FORMAT_S32_LE;
-	}
+	case 32: return SND_PCM_FORMAT_S32_LE; }} else {
+	switch (format) {
+	case  8: return SND_PCM_FORMAT_S8;
+	case 16: return SND_PCM_FORMAT_S16_BE;    
+	case 24: return SND_PCM_FORMAT_S24_BE;      
+	case 32: return SND_PCM_FORMAT_S32_BE; }}
+	
 	return SND_PCM_FORMAT_UNKNOWN;
 }
 
diff --git a/cinelerra-5.1/cinelerra/audiopulse.C b/cinelerra-5.1/cinelerra/audiopulse.C
index 78db1875..157bd53a 100644
--- a/cinelerra-5.1/cinelerra/audiopulse.C
+++ b/cinelerra-5.1/cinelerra/audiopulse.C
@@ -59,8 +59,9 @@ int AudioPulse::open_input()
 {
 	pa_sample_spec *ss = new pa_sample_spec();
 	rd_spec = (void *)ss;
-
-	ss->format = PA_SAMPLE_S16LE;
+	if( BC_Resources::little_endian ) 
+	{ss->format = PA_SAMPLE_S16LE; } else {
+	ss->format = PA_SAMPLE_S16BE;}
 	ss->rate = device->in_samplerate; 
 	ss->channels = device->get_ichannels();   
 	device->in_bits = 16;
@@ -90,7 +91,9 @@ int AudioPulse::open_output()
 {
 	pa_sample_spec *ss = new pa_sample_spec();
 	wr_spec = (void *)ss;
-	ss->format = PA_SAMPLE_S16LE;
+	if( BC_Resources::little_endian )
+	{ ss->format = PA_SAMPLE_S16LE;} else {
+	ss->format = PA_SAMPLE_S16BE;}
 	ss->rate = device->out_samplerate;
 	ss->channels = device->get_ochannels();
 	device->out_bits = 16;
-- 
2.51.2

