当前位置: 首页 > 知识库问答 >
问题:

Tarsos dsp Android AudioTrack播放静态或太快

胡高寒
2023-03-14

这个问题让我沮丧了好一阵子。我试图使用Tarsos DSP在一个我正在为Android工作的项目上执行一些基本的信号处理。音频来自一个标准的WAV文件,是44.1K,16bit立体声。当我设置并运行Tarsos AudioDispatcher使用一个使用Android的AudioTrack输出声音的音频处理器时,我得到的是播放速度过快的静态或音频。

下面是设置音频分派器的代码

public void Play(String source, double startTime, final double endTime){
    InputStream wavStream;
    try {
        wavStream = new FileInputStream(source);
        UniversalAudioInputStream audioStream = new UniversalAudioInputStream(wavStream, audioFormat); 
        dispatcher = new AudioDispatcher(audioStream, bufferSize, overLap);
        AndroidAudioPlayer player = new AndroidAudioPlayer(audioFormat, buffersize);
        dispatcher.addAudioProcessor(player);
        dispatcher.skip(startTime);
        new Thread(new Runnable() {
            @Override
            public void run() {
                while (dispatcher.secondsProcessed() < endTime) {
                    try {
                        Thread.sleep(10);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
                dispatcher.stop();
            }
        }).start();
        dispatcher.run();
        try {
            audioStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }catch (FileNotFoundException e){e.printStackTrace();}
}
public class AndroidAudioPlayer implements AudioProcessor {
private AudioTrack audioTrack;
AndroidAudioPlayer(TarsosDSPAudioFormat audioFormat, int bufferSize){
    audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
            (int)audioFormat.getSampleRate(),
            AudioFormat.CHANNEL_OUT_STEREO,
            AudioFormat.ENCODING_PCM_16BIT,
            bufferSize,
            AudioTrack.MODE_STREAM);
}
@Override
public boolean process(AudioEvent audioEvent){
    short[] shorts = new short[audioEvent.getBufferSize() / 2];
    ByteBuffer.wrap(audioEvent.getByteBuffer()).order(ByteOrder.LITTLE_ENDIAN).asShortBuffer().get(shorts);
    audioTrack.write(shorts, 0, shorts.length);
    audioTrack.play();
    return true;
}

@Override
public void processingFinished(){}

}

我编写了另一个音频处理器,它使用AudioDispatcher从使用JavaZoom的WAV文件中编写剪辑,这也会产生静态或不正确的音频。但是,当我使用InputStream和JavaZoom从WAV文件中编写一个剪辑时,它有时工作得很好,或者生成静态的,我假设这是因为依赖tarsos的方法错误地设置了startTime和stopTime变量。任何见解都将不胜感激。

在调用上述方法之前,我首先调用一个方法,该方法使用示波器和ComplexOnsetDetector音频处理器在同一个WAV文件上使用AudioDispatcher来生成波形视图,并用开始的时间码填充数组。audioFormat变量是这样创建的:TarsosDSPAudioFormat audioFormat=new TarsosDSPAudioFormat(sampleRate,16,2,false,false);,从WAV文件中读取采样率,我已经检查了它是否正确读取。*缓冲区大小是1024,重叠是512,我试过使用所有这些值。

**我已经解决了这个问题。我正在加载一个由JavaZoom MP3转换器创建的WAV文件,该文件不断地覆盖一个文件,而不首先删除它。我认为Tarsos是使用文件长度来确定播放长度,这是不正确的,因为覆盖与删除。删除文件首先解决了问题。

我只需要弄清楚为什么音频在回放时跳过,有时只是静态播放,然后我想我可以走了。

共有1个答案

暨正真
2023-03-14

使用单声道(1声道)输入。TarsosDSP音频处理器目前不支持立体声。

 类似资料:
  • 我正在为我的YouTube频道创建一个网站,因为我为YouTube等制作音乐。 我想知道如何才能为我的网站添加一个mp3播放器,而不是在每次重新加载页面时停止播放。 我想让mp3播放器不断播放,不管它上多少页。 有人能告诉我怎么做吗?谢谢:)

  • 我不小心删除了一个视频文件,但设法用恢复工具保存了它。视频被破坏了,但我设法修复了它,现在有了一个。h264文件。 我对FFMPEG是完全陌生的,运气不太好。任何建议都会很好。 提前致谢

  • 问题内容: 我正在尝试提高将包含敏感数据的MySQL数据库的安全性。我正在努力掌握一些术语。可以让我知道我是否正确理解了这种情况: 静态加密 -似乎我可以在表级别启用它。使用密钥对表中的所有数据进行加密。如果有人持有备份文件或对服务器具有物理访问权限,则数据将受到保护。当然,这假定密钥存储在其他位置。 AES_ENCRYPT- 在向表中插入/更新数据时,可以使用。通过SELECT查询数据时,我使用

  • 问题内容: 我发现了如何使用jquery暂停和播放视频 但是我找不到静音按钮,如果没有jquery解决方案,我只需要一个onclick js解决方案就可以了。我需要尽快。 还有解决静音延迟的方法吗?我希望它在单击按钮后立即将声音静音/取消静音。 问题答案: $(“video”).prop(‘muted’, true); //mute 和 (旁注:在jQuery <1.6中使用if)

  • 太空放置是一款空间主题的放置游戏,单击游戏右上角的 i 获取信息。  

  • 我已经创建了一个非常简单和基本的html5音频播放器,实际上不超过: 但我面临两个问题,这个简单的音频标签在Chrome上可以使用,但在Safari 7上不行;第二个问题是,它不能在我的iPhone iOS7和HTC Android 2.3上使用