2011-01-23 10 views
20

J'essaie d'utiliser la classe AudioRecord pour enregistrer un fichier WAV. Le problème est qu'il ne fournit que les données PCM brutes, et si je l'écris dans un fichier, il n'y a pas d'informations d'en-tête, donc il ne sera pas lu dans un lecteur multimédia. Comment puis-je créer un fichier WAV à partir de ces données brutes?Création d'un fichier WAV à partir de données PCM brutes à l'aide du SDK Android

Ou bien, existe-t-il un autre moyen d'enregistrer du son sous Android dans un fichier WAV (ou, en option, MP3)? Oh, et je sais que MediaRecorder ne peut pas être utilisé car il ne supporte pas les formats WAV ou MP3.

+0

Oh ... J'ai essayé de lire les données PCM premières dans Android ... pourriez-vous s'il vous plaît poster le code que vous utilisez? – Atmocreations

Répondre

13

OK, j'ai compris cela. Ce poste a été cruciale pour me aider: http://computermusicblog.com/blog/2008/08/29/reading-and-writing-wav-files-in-java

Fondamentalement, je ByteArrayOutputStream pour écrire les données brutes PCM de audiorecord, ce qui me permet alors obtenir le tableau d'octets et sa taille lorsque le processus est terminé. Je peux ensuite utiliser ces données en conjonction avec les paramètres SampleRate, BitRate et Stereo/Mono pour créer l'en-tête WAV selon le lien ci-dessus. Le fichier résultant fonctionne parfaitement!

+1

pouvez-vous montrer un exemple de code comment vous avez réalisé cela. J'ai une exigence similaire –

+1

Pouvez-vous me donner une idée de la façon dont vous avez utilisé le fichier wavIo dans votre code? Il y a 2 méthodes principales, lire et enregistrer. J'enregistre l'audio en androïde en utilisant la classe AudioRecord. Et j'écris des données octet par octet. Pouvez-vous s'il vous plaît aider que mon audio ne soit pas enregistré correctement. – Scorpion

+4

votre lien est expiré .. s'il vous plaît donner un morceau de code ou un lien ... – WonderSoftwares

0

Vérifiez le MediaRecorder.setOutputFormat(), vous pouvez définir différents formats de conteneur pour votre enregistrement; il y a MediaRecorder.OutputFormat.MPEG_4 et MediaRecorder.OutputFormat.THREE_GPP; le seul format autorisé le long de RAW est setAudioEncoder (MediaRecorder.AudioEncoder.AMR_NB);

Désolé mais le MP3 n'est pas disponible. Vous avez vraiment besoin de mp3 pour l'enregistrement? WAV à l'opposé de MP3 est un conteneur, pas un format; WAV peut être n'importe quel type de format d'encodage.

Vous pouvez toujours ajouter un en-tête WAV RIFF devant vos données pcm brutes (à condition de connaître exactement le format). Vérifiez ici comment cela doit ressembler: http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/WAVE.html

+0

J'ai vraiment besoin que le fichier de sortie soit un WAV (encodé PCM), ou un MP3. Le service sur lequel il est téléchargé nécessite cela. Donc, autant que je peux voir, je ne peux pas utiliser MediaRecorder. Je suis aussi – user496854

+0

J'ai vraiment besoin que le fichier de sortie soit un WAV (encodé en PCM), ou un MP3. Le service sur lequel il est téléchargé nécessite cela. Donc, autant que je peux voir, je ne peux pas utiliser MediaRecorder. Je suis aussi très mauvais à tous les niveaux bas, donc je ne sais pas à quel point je serais bon de créer la tête moi-même. N'y a-t-il pas de paquets java qui ont cette capacité? – user496854

+0

J'ai effectivement trouvé ceci: http://computermusicblog.com/blog/2008/08/29/reading-and-writing-wav-files-in-java, ce qui a rendu la tâche beaucoup plus facile. Mais je ne suis pas sûr de savoir comment obtenir la taille du bloc de données pour l'octet 40. J'ai écrit les données PCM brutes dans un fichier, alors serait-ce juste la taille de ce fichier? – user496854

-2

Vous pouvez utiliser la classe mediarecord

+3

Pourquoi? il n'a pas de support pour la sortie WAV ou MP3 – user496854

Questions connexes