PlaySound und 48000 Hz -> Zu langsam

In dieser Linux-Ecke dürfen nur Themen rund um Linux geschrieben werden.
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
DarkSoul
Beiträge: 689
Registriert: 19.10.2006 12:51

PlaySound und 48000 Hz -> Zu langsam

Beitrag von DarkSoul »

Wir bringe ich PureBasic dazu, dass eine Audiodatei in der korrekten Geschwindigkeit abgespielt wird, dessen Samplerate nicht mit der der Soundkarteneinstellung unter Linux übereinstimmt?

Ich habe folgendes Code-Schnipsel:

Code: Alles auswählen

initSound()
LoadSound(0, "audio.wav")
PlaySound(0)
Debug GetSoundFrequency(0)
Delay(5000)
Infos zur audio.wav:
- 16-bit signed integer
- PCM
- 48000 Hz
- Stereo

Meine Soundkarte ist systemweit (PulseAudio) auf 44100 Hz eingestellt (hat andere Gründe und es gibt sicher mehrere User, die diese Einstellung verändert haben).

Nun wird meine audio.wav in der Linux-Version meines Programmes zu langsam abgespielt (nämlich als 44100 Hz). Da fehlt das Resampling von 48000 Hz auf 44100 Hz, damit es passt. Stattdessen wird langgezogen.

In allen anderen Playern wird die Datei korrekt abgespielt und unter Windows habe ich das Problem auch nicht.

Was muss ich tun, damit die Geschwindigkeit stimmt? Ich vermute mal, es gibt nicht ohne Grund SetSoundFrequency().

Damit die Samplerate nachträglich auf 48000 Hz setzen, bewirkt gar nichts.

Ist hier mit "SoundFrequency" überhaupt die Sample-Rate gemeint (ich finde die Doku an dieser Stelle zu ungenau und Soundfrequenz ist auch nicht Sample-Rate)? Weil, wenn ich den Wert verringere, läuft es um einen gewissen (mir unbekannten) Faktor schneller statt langsamer und diese Einstellung ist nur in groben Stufen möglich.

GetSoundFrequency() liefert in meinem Fall -17536 (negativ :? Sollte dann eigentlich rückwärts laufen :mrgreen: ).
Bild
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: PlaySound und 48000 Hz -> Zu langsam

Beitrag von ccode_new »

@DarkSoul

Die internen Sound-Befehle kannst du unter Linux in die Tonne treten.

Bei mir kommen bei vielen Wav-Dateien einfach nur mächtige Rauschlaute bei PlaySound().

Ich rate dir nutze direkt die SDL, oder noch viel besser: Nutze eine Audiolib wie bass oder fmod oder openal
... und du wirst glücklich werden.

Es ist einfach so.

PureBasic verwendet zur Audiowiedergabe die SDL, aber hat keine besonders intelligente Abspielfunktionen (mal von den internen OGG/FLAC -Decoder abgesehen) und erlaubt nicht an irgendeiner wichtigen "Decoder-Schraube" zu drehen.

Viele Audio-Player können sowohl 32 bit WAV, als auch die Frequenz (44100 / 48000 / ....) korrekt anpassen und korrekt wiedergeben.

->Solche Sachen erinnern ein bisschen an Schallplatten die zu langsam oder zu schnell abgespielt werden.
(Kann man auch gut mit Audacity testen.)

Per Standard liefert die SDL bei 32 bit MS-WAV folgenden Error: "Unknown 32-bit PCM data format"

Wenn man auch bei 16 bit WAV irgend eine qualtitiv anständige Wiedergabe möchte benötigt man einen erhöhten Mehraufwand der Parameteranpassung. (Diese Anpassungen sind aber per Standard mit PureBasic nicht möglich.)

Die besten Lösungen liefern hier gute externe Audiolibs mit viel mehr Anpassungsmöglichkeiten.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Antworten