1

Cordova のおかげで、ディクタフォンのように自分の声を録音して再生することができました。自分の声に「オートチューン」または「ボコーダー」エフェクトを追加したいのですが、どうすればいいですか?

PS:私はモバイル デバイスで作業しています。

これが私の声を録音して再生するためのスクリプトです。

<script type="text/javascript" charset="utf-8" src="cordova-1.7.0rc1.js"></script>
<script type="text/javascript" src="jquery-1.7.1.js"></script>

<script type="text/javascript">

    var deviceready = false;
    var mediaVar = null;
    var recordFileName = "recording.wav";
    var status = null;
    var isIOS = false;

    function onBodyLoad()
    {        
        document.addEventListener("deviceready", onDeviceReady, false);
        deviceready = true;
    }

    $(document).ready(function(){
        $("#stopBtn").hide();
        $("#playBtn").hide();

        //validation to check if device is ready is skipped

        $("#recordBtn").click(function(){
            record();                  
        });

        $("#playBtn").click(function(){
            play();
        });

        $("#stopBtn").click(function(){
            stop();
        });
    });

    function record()
    {
        createMedia(function(){
            status = "recording";
            mediaVar.startRecord();
            $("#recordBtn").hide();
            $("#stopBtn").show();
            $("#playBtn").hide();
        },onStatusChange);
    }

    function createMedia(onMediaCreated, mediaStatusCallback){
        if (mediaVar != null) {
            onMediaCreated();
            return;
        }

        if (typeof mediaStatusCallback == 'undefined') 
            mediaStatusCallback = null;

        if (isIOS) {
            //first create the file
            window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fileSystem){
                fileSystem.root.getFile(recordFileName, {
                    create: true,
                    exclusive: false
                }, function(fileEntry){
                    log("File " + recordFileName + " created at " + fileEntry.fullPath);
                    mediaVar = new Media(fileEntry.fullPath, function(){
                        log("Media created successfully");
                    }, onError, mediaStatusCallback); //of new Media
                    onMediaCreated();
                }, onError); //of getFile
            }, onError); //of requestFileSystem
        } else //it's Android
        {
            mediaVar = new Media(recordFileName, function(){
                log("Media created successfully");
            }, onError, mediaStatusCallback); 
            onMediaCreated();
        }
    }

    function stop()
    {
        if (mediaVar == null)
            return;

        if (status == 'recording')
        {
            mediaVar.stopRecord();
            log("Recording stopped");
        }
        else if (status == 'playing')
        {
            mediaVar.stop();            
            log("Play stopped");
        } 
        else
        {
            log("Nothing stopped");
        }
        $("#recordBtn").show();
        $("#stopBtn").hide();
        $("#playBtn").show();
        status = 'stopped';
    }

    function play()
    {
        createMedia(function(){
            status = "playing";
            mediaVar.play();    
            $("#recordBtn").hide();
            $("#stopBtn").show();
            $("#playBtn").hide();
        });
    }

    function onStatusChange()
    {
        if (arguments[0] == 4) //play stopped
        {
            $("#recordBtn").show();
            $("#stopBtn").hide();
            $("#playBtn").show();
        } 
    }

    function onSuccess()
    {
        //do nothing
    }

    function onError(err)
    {
        if (typeof err.message != 'undefined')
            err = err.message;
        alert("Error : " + err);
    }

    function log(message)
    {
        if (isIOS)
            console.log(message);
        else
            console.info(message);
    }

    function onDeviceReady()
    {

    }

</script>
4

1 に答える 1

3

ピッチの検出と操作 (Autotune は、それを実現する製品 Anteres Audio Technology のブランド名です) は、計算集約型の難しいデジタル信号処理問題 (DSP) です。

DPS Dimensionは、ピッチ操作に関する優れたチュートリアルを提供していますが、完全なソリューションにはほど遠いものです。

DSP の強力な学歴がなければ、DSP で大きく前進することはまずありません。既存の実装は独自のものであり、通常は C++ で実装されています。この問題領域にも多くの特許があります。1 つのオプションは、ライセンスされたコンポーネントを使用してオーディオ処理サーバー側を実装することです。

Javascript でボコーダーを実装する方がうまくいくかもしれません。複雑さは低く、パブリック ドメインには試すべきアルゴリズムがたくさんあります。

于 2013-06-05T08:08:07.460 に答える