2013-04-17 6 views
1

У меня есть PCM-поток, который я бы хотел визуализировать с помощью «Visualizer» для Android, но не разыгрывая его громко.Android Visualizer на приглушенном AudioTrack/MediaPlayer

Для этого я внедрил android-visualizer.

визуализация успешна, если я использую

audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, 44100, 
      AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT, 
      fileContent.length, AudioTrack.MODE_STREAM); 
audioTrack.play(); 
mVisualizerView.link(audioTrack); 
.. 
audioTrack.write(fileContent, 0, bytes); 

Но теперь моя проблема в том, что я не хочу, чтобы действительно «играть» мой PCM, я просто хотел бы, чтобы визуализировать его. Мои пользователи, возможно, слышат музыку со своим медиа-плеером, и я не хочу их беспокоить.

Так что я подумал: «Хорошо, я могу просто отключить мой AudioTrack»:

audioTrack.setStereoVolume(0.0f, 0.0f); 

но, к сожалению, нет и не более визуализации. Я думал, что Visializer следует игнорировать громкость аудиодорожки из-за SCALING_MODE_NORMALIZED:

Определяет режим съемки, где усиление применяется на основе содержания захваченных данных. Это режим визуализатора по умолчанию, а подходит для визуализации музыки.

Следующая я пытался не писал PCM в аудио-дорожки, но и обеспечивает его непосредственно в ящике:

mVisualizerView.updateVisualizer(fileContent); 

Это создает кривую, но это выглядело действительно с ума и не имеет никакого отношения к делайте с этим то, что я ожидал (может быть, потому, что я предоставляю стерео вместо моно?).

Я также не имел никакого успеха в создании «waveform» или «fft» -данных PCM-потока - я просто для новичков.

У кого-нибудь есть идея?

ответ

0

Try AudioManager.setStreamMute (streamType, состояние)

+0

Я не вижу, как это поможет, поскольку это переключает объем потока между 0 и некоторым другим значением. «AudioFlinger» учитывает громкость трека, объем потока и мастер-громкость при расчете конечного тома. Таким образом, этот метод не достигнет того, чего хочет OP (чтобы получить ненулевые данные в «Visualizer», но без прослушивания звука). – Michael

0

Так что я подумал: 'Хорошо, я могу просто отключить мой AudioTrack'. но, к сожалению, визуализации больше нет.

Это как раз то, как это работает. AudioFlinger выполняет микширование (при подаче тома) перед применением эффектов (эффект Visualizer является эффектом).

Но вам не нужен API Visualizer для того, что вы хотите сделать, как вы уже поняли. Вы можете создать текстуру холста или OpenGL ES, нарисовать некоторые данные на основе ваших данных PCM каждый кадр (60 кадров в секунду) и показать их в одном из представлений вашего приложения.

Если вы просто хотите построить форму волны, это будет тривиально. Предположим, что у вас есть растровое изображение шириной 100 пикселей, которое вы хотите нарисовать: в кадре N вы возьмете образцы 735 (44100/60), начиная с N * 735, и произведете 100 точек из них (например, линейно интерполируя по этим 735 образцам и масштабируя их в соответствии с вертикальным разрешением вашего растрового изображения). Если ваши данные PCM являются стерео, вы можете взять каждую пару образцов в точках интерполяции и усреднить их.

Если вы хотите нарисовать spectrogram, все будет немного сложнее, так как вам сначала нужно будет преобразовать ваши аудиоданные из области времени в the frequency domain.

+0

К нисходящему: учтите, каким образом этот ответ не был полезен? – Michael