Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Sa Jul 05, 2025 11:25

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Mi Jul 28, 2010 02:41 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

ich hab hier eine AC3 datei mit insgesamt 6 channels.
Bisher hab ich mit OpenAL immer nur Mono, bzw Stereo abgespielt.. und, so wie ich das grad sehe, kann OpenAL auch nur 2 Kanäle pro Source abspielen, oder?

Muß ich mich dann selbst drum kümmern das ich meine 6-channels in mehrere OpenAL-Sources packe?
Da hab ich dann allerdings das Problem, dass meine dekodieren daten eben so vorliegen:

Code:
// die Zahl steht als Channel-Nummer:
1122334455661122334455661122334455661122334455661122...


Ich müßte also meinen Buffer etwas zerpflücken und hin und herkopieren, ist natürlich nicht das optimalste in sachen speed.. und nen stride parameter oder ähnliches finde ich bei OpenAL auch nicht :(

Hat da wer ein paar Tips für mich?

Aya


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Jul 28, 2010 12:14 
Offline
DGL Member

Registriert: Do Jun 28, 2007 17:58
Beiträge: 193
Programmiersprache: Pascal, C
Leider geht Surround Sound nur über eine Extension (die meines Wissens nach unter anderem von softal Plattformübergreifend unterstützt wird) in OpenAL. Du kannst zwar das Signal in seine Komponenten aufsplitten, jeweils in einen OAL-Sources Streamen und diese so im Raum platzieren, dass der Ton nur jeweils aus einem Lautsprecher kommt, ich halte dies jedoch für ziemlich kompliziert und wie du schon gesagt

Je nach dem welche Platformen du verwendest, würde ich für diesen Zweck eher auf ALSA, PulseAudio, DirectSound oder WASAPI aufbauen. Wenn du Pascal verwendest habe ich mit Audorra alles schon mundgerecht Platformübergreifend gekapselt.

_________________
http://audorra.sourceforge.net//http://andorra.sourceforge.net


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Jul 28, 2010 23:04 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

wenn ich das selber in die einzelnen 3D Sources packen muss, woher weiß ich denn, welcher channel wo hingehört? Gibt es da irgendwie nen standart? also vonwegen das 6 Channels immer als 5.1 Interpretiert werden und dabei der erste channel center ist, 2 und 3 sind front left und right etc.. Oder gubt es da keinen standart, bzw ist der bei jedem AudioFormat anders?

Und, wie könnte ich denn die 6channels selbst in einen zusammenmergen? geht das wenn ich einfach die samples der einzelnen channels zusammenaddiere? hab leider nich so viel ahnung von audio :/


Als Platform nutze ich hauptsächlich MacOS und iOS. Allerdings ist alles so ausgelegt das es Platformunabhängig ist, also das openAL Audio Backend kann beliebig ausgetauscht werden.

Kennst du noch ein paar alternative gute Audio-Libs die auch unter MacOS verfügbar sind? Bzw ich werd evtl mal CoreAudio ausprobieren, das ist das standart audioframework von apple, allerdings nutzt das afaik unter der haube auch OpenAL.

Aya


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Jul 29, 2010 02:08 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Aya hat geschrieben:
Und, wie könnte ich denn die 6channels selbst in einen zusammenmergen? geht das wenn ich einfach die samples der einzelnen channels zusammenaddiere? hab leider nich so viel ahnung von audio :/


Hab das jetzt einfach mal ausprobiert, also einfach die channels zusammen addieren, scheint zu klappen.. :)
Ich hab mir die 6 channels alle mal einzeln angehört, um rauszubekommen, welcher wohin gehört.

Ich hab das jetzt so:

Code:
Ch 0: Surround Left
Ch 1: Surround Right
Ch 2: Center
Ch 3: Subwoofer
Ch 4: Front Left
Ch 5: Front Right


Wobei es aber sein kann das ich die Surround und Front Kanäle vertausche.. bin mir nicht sicher.
Aber.. ist das jetzt ein Standardt, oder wird in jedem Audio Format (z.B. bei AC3) immer mit gespeichert, welcher Kanal wo ist..?

Das auf Stereo runter rechnen habe ich einfach so gemacht:

Code:
StereoLeft = Ch0 + Ch2 + Ch3 + Ch4;
StereoRight = Ch1 + Ch2 + Ch3 + Ch5;


Ist das so richtig? (Wenn man nicht berücksichtigt das die Lautsprecher ja eigentlich etwas ausseinander sind und dadurch die lautstärke verteilung nochmal anders sein müßte.)

Aya~


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Jul 29, 2010 10:25 
Offline
DGL Member

Registriert: Do Jun 28, 2007 17:58
Beiträge: 193
Programmiersprache: Pascal, C
Soweit ich weiß ist die Kanalbelegung
L, R, C, Sw, Rear L, Rear R

Steht auch hier:
http://en.wikipedia.org/wiki/Surround_s ... r_channels

Edit:
Und ja, zusammenadieren ist richtig ich würde es jedoch gewichtet machen (also jeder Kanal ein Viertel) damit du kein Übersteuern bekommst. Also:
Code:
L = ¼L + ¼C + ¼Sw + ¼RL
R = ¼R + ¼C + ¼Sw + ¼RR


Eventuell könntest du auch L und RL/R und RR mehr gewichten, also z.B.
Code:
L = 1/3L + 1/3RL + 1/6C + 1/6Sw
R = 1/3R + 1/3RR + 1/6C + 1/6Sw


Edit2:
Hier stehts auch nochmal für AAC
http://en.wikipedia.org/wiki/Surround_s ... tification

_________________
http://audorra.sourceforge.net//http://andorra.sourceforge.net


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 16 Queries | GZIP : On ]