gpt4 book ai didi

java - Android-创建循环垫的信息-音乐应用

转载 作者:行者123 更新时间:2023-12-03 00:15:33 24 4
gpt4 key购买 nike

我想创建一个音乐循环垫,类似于:https://www.youtube.com/watch?v=fwBPYwiYp-Y

loop pad 24

现在,我正在使用MediaPlayer播放声音。我有一个全局变量,用于存储正在播放的第一个音频的当前时间(位置),当我按下另一个按钮时,相应的音频文件将在该全局变量给定的位置开始播放。

我的问题是:声音不同步播放。

你能给我些帮助吗?如何同步声音?像这个程序https://www.youtube.com/watch?v=fwBPYwiYp-Y

您能指出一些有关如何创建回圈垫的信息或教程吗?

谢谢
理查德

最佳答案

这样的编程比您想象的要难。要使声音同步播放,您必须执行以下两项操作:

  • 确保您所有的声音都具有相同的节奏并正确裁剪-这意味着声音片段的开始和结束必须准确无误-另一个解决方案是存储每个片段的开始和结束时间(非常轻松使用OOP)
  • 使用计时器来确保声音开始按节拍开始播放。例如,如果要使音乐以120 bpm的速度运行,则需要使计时器每500 ms触发一次。

  • 这是一些代码(仅概念,不会编译):
    Timer beatTimer;
    boolean isDrumLoopEnabled;
    boolean isDrumLoopCurrentlyPlaying;
    Sound drumloop;

    public void startMusic(){
    //prepare timer
    beatTimer=new Timer();
    beatTimer.interval=500;//for 120 bpm
    beatTimer.onTick+=onTickHandler;

    isDrumLoopPlaying=false;
    isDrumLoopCurrentlyPlaying=false;

    //load sounds
    Sound drumloop=new Sound("/storage/emulated/drumloop.ogg");

    //start music
    beatTiemr.start();
    }

    //this method will run on every beat:
    public void onTickHandler(){
    if(isDrumLoopEnabled){
    //make sure drum loop isn't already playing
    if(!isDrumLoopCurrentlyPlaying){
    //begin looping drumloop in background
    drumloop.startloop();
    isDrumLoopCurrentlyPlaying=true;
    }
    }else{
    if(isDrumLoopCurrentlyPlaying){
    //stop playing drumloop
    drumloop.stopPlaying();
    }
    }
    }

    //when the button is pressed...
    public void drumloop_buttonpressed(){
    //this will toggle whether to play the drum loop:
    isDrumLoopEnabled=!isDrumLoopEnabled;
    }

    关于java - Android-创建循环垫的信息-音乐应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33271494/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com