Android-Hörgeschichte zu spielen .wav-Datei immer nur Weisses Rauschen
Wenn ich eine Datei mit dem folgenden code:
private void PlayAudioFileViaAudioTrack(int ResId) throws IOException {
int intSize = android.media.AudioTrack.getMinBufferSize(11025, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT);
AudioTrack at = new AudioTrack(AudioManager.STREAM_MUSIC, 11025, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, intSize,
AudioTrack.MODE_STREAM);
int count = 256 * 1024; //256 kb
byte[] byteData = null;
byteData = new byte[(int) count];
InputStream in = null;
AssetFileDescriptor fd = null;
fd = mResources.openRawResourceFd(ResId);
in = mResources.openRawResource(ResId);
int bytesRead = 0, amount = 0;
int size = (int) fd.getLength();
at.play();
while (bytesRead < size) {
amount = in.read(byteData, 0, count);
if (amount != -1) {
at.write(byteData, 0, amount);
}
}
in.close();
at.stop();
at.release();
}
Das einzige, was ich höre, ist statische, weißes Rauschen. Ich habe überprüft, dass meinen .wav-Datei hat die gleichen Eigenschaften (samplerate,bitrate). Ich habe nicht viel wissen über die raw-audio-Daten(PCM), also ich Frage mich, wenn jemand könnte sehen, was ist Los mit meinem code.
Du musst angemeldet sein, um einen Kommentar abzugeben.
aus dem code kann ich sehen, dass Sie gerade Lesen von Daten aus der wav-Datei und importieren Sie einfach diese der Hörgeschichte. Wav-Dateien haben einen kleinen Kopf, wie Sie hier sehen können https://ccrma.stanford.edu/courses/422/projects/WaveFormat/ So überspringen Sie den Kopf und zeigen Sie Ihre Datei-Deskriptor an der richtigen Stelle, wo die eigentlichen audio-Daten sind.
Auch, wenn Sie die Wiedergabe einer audio-Datei, und Sie sind den Umgang mit byte-Operationen sollten Sie kümmern sich um den endian Typ. Werfen Sie einen Blick hier Mit Hörgeschichte in Android eine WAV-Datei wiedergeben
Unten mein code (es sollten einige Kontrollen und den WAV-header überspringen fehlen), die funktioniert in beiden Nexus One und Galaxy S mit einer wav-Datei mit Frequenz 8000 Hz und 16 bit-Codierung.
write()
FunktionAudioTrack
nimmt als parameter einen Vektor, der die shorts.Sieht viel komplizierter als das, was ich getan habe. Ich spielte sounds mit dieser. Ich denke .wav-Dateien würde genauso gut funktionieren.
Für statische Ressourcen, ist es sogar noch einfacher:
Wenn Sie die gespeicherte Datei im wav-format und spielen wollen Sie mit Hörgeschichte Folgen Sie dann diesen code: