2010-10-10 24 views
0

Je veux obtenir le niveau sonore, afin que je puisse l'afficher dans mon application SDL (la plate-forme est Linux) lors de l'enregistrement du son. Comment puis je faire ça? J'utilise FMOD API dans mon application, mais pour l'enregistrement, j'utilise SoX (forking et en utilisant exec() pour le configurer - probablement cela pourrait être mieux fait mais je ne sais pas comment :(). Dois-je utiliser certains fonction de SoX, API FMOD, ou peut-être accéder directement à/dev/dsp pour obtenir des données sonores?Obtenir le niveau sonore de l'appareil lors de l'enregistrement en C++

Répondre

1

Vous pouvez effectuer des enregistrements dans FMOD si vous le souhaitez: des API FMOD telles que System :: recordStart et System :: getRecordDriverInfo peuvent être utilisées.FMOD fournit des exemples d'enregistrement que vous pouvez utiliser comme base pour votre solution

Spécifiquement pour obtenir le niveau sonore el, si vous vouliez le faire comme une chose d'exécution, vous pouvez utiliser Channel :: getWaveData qui vous donnera un instantané de l'audio en cours de lecture, pour cela, vous auriez besoin de lire les données d'enregistrement. Vous pouvez également utiliser Sound :: lock/Sound :: unlock pour accéder aux données de son d'enregistrement si elles ne sont pas en cours de lecture. Une fois que vous avez accès aux données sonores par l'une ou l'autre méthode, vous pouvez lire les valeurs pour obtenir des informations sur le niveau sonore/les crêtes.

+0

J'ai essayé d'utiliser FMOD, mais je veux obtenir l'encodage MP3 à la volée, et pour autant que je sache, ça ne marche pas dans FMOD sous Linux. – mav

+0

FMOD ne peut pas aider avec le côté de l'encodage, en utilisant Sound :: lock et unlock vous pouvez avoir accès au PCM brut. Si vous voulez alimenter ces morceaux de données en quelque chose comme boiteux, alors cela est certainement possible de produire un MP3, mais FMOD n'a pas intégré dans le support de l'encodage. –

1

Non, à tout le moins, vous devriez utiliser l'API ALSA "sûre" .Mais vous devriez envisager d'utiliser quelque chose de plus haut comme Gstreamer ou PulseAudio