Android AudioRecord Pris En Charge Des Taux D'Échantillonnage
Je suis à essayer de comprendre ce que les taux d'échantillonnage sont pris en charge pour les téléphones fonctionnant sous Android 2.2 et plus. Nous aimerions échantillon à un taux inférieur à 44,1 kHz et ne pas avoir à ré-échantillonnage.
Je sais que tous les téléphones soutien de 44100Hz, mais je me demandais si il y a un tableau qui montre ce que les taux d'échantillonnage sont valables pour certains téléphones. J'ai vu Android documentation (
http://developer.android.com/reference/android/media/AudioRecord.html ), mais il ne l'aide pas beaucoup.
Quelqu'un a trouvé une liste de ces taux d'échantillonnage??
Vous devez vous connecter pour publier un commentaire.
L'affiche originale a probablement depuis longtemps déplacé, mais je vais publier ce post au cas où quelqu'un d'autre trouve cette question.
Malheureusement, dans mon expérience, chaque appareil peut prendre en charge des fréquences d'échantillonnage différentes. Le seul moyen sûr de savoir ce que les taux d'échantillonnage d'un dispositif de soutien est de les tester individuellement, en vérifiant le résultat de AudioRecord.getMinBufferSize() est non négatif (ce qui signifie qu'il y a une erreur), et retourne un valide minimum de la taille de la mémoire tampon.
Android a
AudioManager.getProperty()
fonction pour acquérir minimum de la taille de la mémoire tampon et d'obtenir le préféré le taux d'échantillonnage audio d'enregistrement et de lecture. Mais oui, bien sûr, AudioManager.getProperty() n'est pas disponible sur l'API de niveau < 17. Voici un exemple de code d'un exemple d'utilisation de cette API.Si c'est un retard de réponse, j'ai pensé que cela pourrait être utile.
PROPERTY_OUTPUT_SAMPLE_RATE
donne vous le meilleur taux d'échantillonnage pour la lecture, pas d'enregistrement. Aussi loin que je peux voir, il n'y a pas de méthode pour obtenir Audiorecord optimale de la fréquence d'échantillonnage.the native or optimal output sample rate for this device's primary output stream, in decimal Hz.
Donc pas liés à l'enregistrement.Malheureusement pas encore tous les téléphones de soutien de la soi-disant garanti 44,1 kHz taux 🙁
J'ai pu en tester un Samsung GalaxyY (GT-S5360L) et si vous enregistrez à partir de la
Camcorder
source (ambiance microphone), la seule prise en charge taux de 8 khz et 16 khz. Enregistrement @ 44.1 kHz produit de proférer des ordures et @ 11,025 kHz, produit des sons-une altération de l'enregistrement avec un peu moins de durée que le son d'origine.En outre, les deux stratégies proposées par @Yahma et @Tom échouer sur ce téléphone, car il est possible de recevoir un positif, minimum-taille de la mémoire tampon à partir d'une configuration non prise en charge, et pire encore, j'ai été obligé de réinitialiser le téléphone pour obtenir de l'audio de la pile fonctionne à nouveau, après avoir tenté d'utiliser un
AudioRecord
classe initialisé à partir de paramètres qui produisent un soi-disant valide, (non-exception de sensibilisation)AudioTrack
ouAudioRecord
instance.Je suis franchement un peu inquiet sur les problèmes que je vois lors de la libération de son application à l'état sauvage. Dans notre cas, on nous oblige à introduire une coûteuse échantillon de taux de conversion de la couche si nous nous attendons à réutiliser nos algorithmes (s'attendant à une 44,1 kHz fréquence d'enregistrement)sur ce modèle de téléphone.
🙁
J'ai un téléphone (Acer Z3) où j'ai positives, taille de la mémoire tampon retourné à partir de AudioRecord.getMinBufferSize(...) lors de l'essai de 11025 Hz. Cependant, si j'ai par la suite exécuter
Je peux voir que ce taux d'échantillonnage en fait ne représente pas une configuration valide (comme l'a souligné user1222021 5 Juin '12). Donc ma solution est d'exécuter à la fois des tests pour trouver un valable taux d'échantillonnage.
J'aimerais offrir une alternative à la Yahma de réponse.
Je suis d'accord avec sa proposition qu'il doit être testé (bien que sans doute il varie selon le modèle, l'appareil), mais en utilisant getMinBufferSize semble un peu indirecte pour moi.
Afin de tester si une fréquence d'échantillonnage désirée est pris en charge, je suggère d'essayer de construire un AudioTrack exemple avec la fréquence d'échantillonnage désirée - si le taux d'échantillonnage n'est pas pris en charge, vous aurez une exception de la forme:
"de java.lang.IllegalArgumentException: 2756Hz n'est pas pris en charge taux d'échantillonnage"
Cette méthode donne de la minimum audio taux d'échantillonnage pris en charge par votre appareil.
NOTE : Vous pouvez inverser la boucle for pour obtenir le maximum taux d'échantillonnage pris en charge par votre appareil (Ne pas oublier de changer le nom de la méthode).
NOTE 2 : Si android doc a dit jusqu'à 48000(48 khz) fréquence d'échantillonnage est pris en charge ,j'ai ajouté tous les taux d'échantillonnage (comme dans wikipedia) depuis qui connaissent les nouveaux appareils peuvent enregistrer UHD audio supérieur (échantillonnage) flux d'images.
Ce Code vous donnera Max Supporté Taux d'Échantillonnage sur votre Android OS. Il suffit de Déclarer
ArrayList <Integer> TrueMan;
dans votre montée de la classe. Ensuite, vous pouvez utiliser un taux d'échantillonnage élevé dans AudioTrack et AudioRecord pour obtenir une meilleure qualité sonore. Référence.Seulement certaines informations mises à jour ici. J'ai passé un certain temps à essayer d'obtenir l'accès à enregistrer à partir du microphone de travail avec Android 6 (4.4 KitKat était très bien). L'erreur affichée est la même que j'ai pour l'4.4 lors de l'utilisation du mauvais paramètres pour le taux d'échantillonnage/pcm etc. Mais mon problème est dans le fait que les Autorisations dans AndroidManifest.xml ils ne sont plus suffisants pour demander l'accès à la Micro et en fait maintenant ce qui doit être fait de l'exécution:
https://developer.android.com/training/permissions/requesting.html