2012-03-29 17 views
1

Ich muss Audio-Sample-Werte lesen. Ich verwende für die Audioqueue Rückruf (von Apple SpeakHere Beispiel):AudioQueue-Beispielwerte sind falsch

 UInt32 samplesCount = inCompleteAQBuffer->mAudioDataBytesCapacity/2; 

    UInt16 *samples = (UInt16 *)inCompleteAQBuffer->mAudioData; 

    for (int i=0; i < samplesCount; i++) 
    { 
     printf("%i\n", samples[i]); 
    } 

Werte zurückgegeben werden, aber wenn ich sie mit Grafik von Dreistigkeit vergleichen zu können, scheint sie falsch zu sein:

screen

Audacity-Werte reichen von 1 (65535) bis -1 (0). So logisch erster Abtastwert 32767 sein sollte, sollte zweite ~ 50 000 ...

Aber ich empfing andere Ergebnisse:

value - position 

    65535 - 0 
    29501 - 1 
    26086 - 2 
    63656 - 3 
    28477 - 4 
    65407 - 5 
    36802 - 6 
    36546 - 7 
    18244 - 8 
    17220 - 9 

    player settings: 

    (Float64) mSampleRate = 44100 
    (UInt32) mBytesPerPacket = 2 
    (UInt32) mFramesPerPacket = 1 
    (UInt32) mBytesPerFrame = 2 
    (UInt32) mChannelsPerFrame = 1 
    (UInt32) mBitsPerChannel = 16 
    (UInt32) mReserved = 0 

Frage - warum Probenwerte von mAudioData zurück falsch sind?

Antwort

2

Die Datei hat eine andere Endgültigkeit als Ihr System. Sie müssen die Byte-Reihenfolge jedes Beispiels austauschen. Außerdem sind die Samples Signed 16 Bit Integers (SInt16), nicht UInt16. Daher ist der maximale Wert 32767 (nicht 65535) und der minimale Wert ist -32767.

Schauen Sie in ExtendedAudioFile.h und AudioConverter.h nach Hilfe für die Konvertierung.

+0

Vielen Dank für Ihre Antwort. Aber ich habe bereits ein Audio-Unit-Beispiel aus [link] (https://github.com/reinforce-lab/MonoTouch.AudioUnit) und SInt32 verwendet, um Beispielwerte zu erhalten, und es hat für mich funktioniert. Übrigens, gibt es einen Unterschied zwischen SInt16 und UInt16? Ich meine, UInt16 anstelle von SInt16 zu verwenden, um Werte im Bereich von 0 (-32767 in SInt16) bis 65535 (32767 in SInt16) zu erhalten, ist falsch? – f3n1kc

+0

Es ist in Ordnung mit mir, aber Sie werden nicht die gleichen Werte wie Dreistigkeit sehen, es sei denn, Sie Byte tauschen und verwenden SInt16. – hooleyhoop

Verwandte Themen