Andreas Hoffmann
- Forum-Beiträge: 36
26.11.2012, 00:26:07 via Website
26.11.2012 00:26:07 via Website
Hallo Leute,
ich habe leider Probleme mit dem erzegen einer Wave-Datei. Über den AudioRecorder nehme ich das Mikrofon auf und speichere die PCM-Informationen in einem Array. Nun möchte ich eine WAVE-Datei erzeugen und habe eine Methode für die Erzeugung eines Headers. Leider scheint die Methode nicht richtig zu funktionieren, denn bei dem Versuch die Datei abzuspielen bekomme ich einen Fehler.
Leider finde ich meinen Fehler nicht =(
Wäre echt super, wenn mir jemand weiter helfen könnte =)
Meine Parameter sind
sampleRate = 44100
bitRate = 16
channels = 1
totalAudioLength = bei mir ist es ein Short-Array, also array.size() * 2;
LG Andy
ich habe leider Probleme mit dem erzegen einer Wave-Datei. Über den AudioRecorder nehme ich das Mikrofon auf und speichere die PCM-Informationen in einem Array. Nun möchte ich eine WAVE-Datei erzeugen und habe eine Methode für die Erzeugung eines Headers. Leider scheint die Methode nicht richtig zu funktionieren, denn bei dem Versuch die Datei abzuspielen bekomme ich einen Fehler.
Leider finde ich meinen Fehler nicht =(
Wäre echt super, wenn mir jemand weiter helfen könnte =)
Meine Parameter sind
sampleRate = 44100
bitRate = 16
channels = 1
totalAudioLength = bei mir ist es ein Short-Array, also array.size() * 2;
1private byte[] getWaveHeader(int sampleRate, int bitrate, int channels, int totalAudioLength)
2 {
3 byte[] header = new byte[44];
4
5 int totalDataLen = header.length - 8 + totalAudioLength;
6 int byterate = ((sampleRate * bitrate) / 8);
7
8
9 header[0] = 'R'; // RIFF/WAVE header
10 header[1] = 'I';
11 header[2] = 'F';
12 header[3] = 'F';
13 header[4] = (byte) (totalDataLen & 0xff);
14 header[5] = (byte) ((totalDataLen >> 8) & 0xff);
15 header[6] = (byte) ((totalDataLen >> 16) & 0xff);
16 header[7] = (byte) ((totalDataLen >> 24) & 0xff);
17 header[8] = 'W';
18 header[9] = 'A';
19 header[10] = 'V';
20 header[11] = 'E';
21 header[12] = 'f'; // 'fmt ' chunk
22 header[13] = 'm';
23 header[14] = 't';
24 header[15] = ' ';
25 header[16] = 16; // 4 bytes: size of 'fmt ' chunk
26 header[17] = 0;
27 header[18] = 0;
28 header[19] = 0;
29 header[20] = 1; // format = 1
30 header[21] = 0;
31 header[22] = (byte) channels;
32 header[23] = 0;
33 header[24] = (byte) (sampleRate & 0xff);
34 header[25] = (byte) ((sampleRate >> 8) & 0xff);
35 header[26] = (byte) ((sampleRate >> 16) & 0xff);
36 header[27] = (byte) ((sampleRate >> 24) & 0xff);
37 header[28] = (byte) (byterate & 0xff);
38 header[29] = (byte) ((byterate >> 8) & 0xff);
39 header[30] = (byte) ((byterate >> 16) & 0xff);
40 header[31] = (byte) ((byterate >> 24) & 0xff);
41 header[32] = (byte) (bitrate / 8); // block align
42 header[33] = 0;
43 header[34] = (byte) bitrate; // bits per sample
44 header[35] = 0;
45 header[36] = 'd';
46 header[37] = 'a';
47 header[38] = 't';
48 header[39] = 'a';
49 header[40] = (byte) (totalAudioLength & 0xff);
50 header[41] = (byte) ((totalAudioLength >> 8) & 0xff);
51 header[42] = (byte) ((totalAudioLength >> 16) & 0xff);
52 header[43] = (byte) ((totalAudioLength >> 24) & 0xff);
53
54 return header;
55 }
2 {
3 byte[] header = new byte[44];
4
5 int totalDataLen = header.length - 8 + totalAudioLength;
6 int byterate = ((sampleRate * bitrate) / 8);
7
8
9 header[0] = 'R'; // RIFF/WAVE header
10 header[1] = 'I';
11 header[2] = 'F';
12 header[3] = 'F';
13 header[4] = (byte) (totalDataLen & 0xff);
14 header[5] = (byte) ((totalDataLen >> 8) & 0xff);
15 header[6] = (byte) ((totalDataLen >> 16) & 0xff);
16 header[7] = (byte) ((totalDataLen >> 24) & 0xff);
17 header[8] = 'W';
18 header[9] = 'A';
19 header[10] = 'V';
20 header[11] = 'E';
21 header[12] = 'f'; // 'fmt ' chunk
22 header[13] = 'm';
23 header[14] = 't';
24 header[15] = ' ';
25 header[16] = 16; // 4 bytes: size of 'fmt ' chunk
26 header[17] = 0;
27 header[18] = 0;
28 header[19] = 0;
29 header[20] = 1; // format = 1
30 header[21] = 0;
31 header[22] = (byte) channels;
32 header[23] = 0;
33 header[24] = (byte) (sampleRate & 0xff);
34 header[25] = (byte) ((sampleRate >> 8) & 0xff);
35 header[26] = (byte) ((sampleRate >> 16) & 0xff);
36 header[27] = (byte) ((sampleRate >> 24) & 0xff);
37 header[28] = (byte) (byterate & 0xff);
38 header[29] = (byte) ((byterate >> 8) & 0xff);
39 header[30] = (byte) ((byterate >> 16) & 0xff);
40 header[31] = (byte) ((byterate >> 24) & 0xff);
41 header[32] = (byte) (bitrate / 8); // block align
42 header[33] = 0;
43 header[34] = (byte) bitrate; // bits per sample
44 header[35] = 0;
45 header[36] = 'd';
46 header[37] = 'a';
47 header[38] = 't';
48 header[39] = 'a';
49 header[40] = (byte) (totalAudioLength & 0xff);
50 header[41] = (byte) ((totalAudioLength >> 8) & 0xff);
51 header[42] = (byte) ((totalAudioLength >> 16) & 0xff);
52 header[43] = (byte) ((totalAudioLength >> 24) & 0xff);
53
54 return header;
55 }
LG Andy
— geändert am 26.11.2012, 00:28:13
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.