2013-06-05 5 views
0

나는 코르도바 덕분에 딕 터폰처럼 내 목소리를 녹음하고 연주 할 수 있었다. 이제 "Autotune"또는 "Vocoder"효과를 내 목소리에 추가하고 싶습니다. 어떻게 할 수 있습니까?자바로 녹음 사운드를 "autotune"하는 방법

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> 

답변

2

피치 감지 및 조작 (오토 튜닝이 그것을 달성하는 제품 Anteres 오디오 기술에 대한 브랜드 이름입니다) 하드 디지털 신호 처리입니다 문제를 (DSP) 계산 집중적 인.

DPS Dimension은 피치 조작에 대한 유용한 자습서를 제공하지만 완전한 해결책이 아닙니다.

DSP에 대한 학문적 배경이 없으면 많은 어려움을 겪지 않을 것입니다. 기존 구현은 독점적이며 일반적으로 C++로 구현됩니다. 이 문제 공간에는 많은 특허가 있습니다. 라이센스가있는 구성 요소를 사용하여 서버 측에서 오디오 처리를 구현하는 것이 하나의 옵션 일 수 있습니다.

Javascript에서 보코더를 구현하는 것이 더 많은 행운을 빕니다. 복잡성이 낮고 공개 도메인에 시도 할 수있는 알고리즘이 많이 있습니다.

+0

그래, 정말 고마워! 보코더를 구현하려고합니다. – user2448765

+0

또는 .mp3에 적용 할 웹 서비스가 있습니까? – user2448765

+0

나는이 특별한 효과를 제공하는 것을 모른다. 그러나 그 아이디어는 이전에 분명히 제안되었고 구현하기가 몹시 어렵지 않다. – marko