이 글을 읽어 주셔서 감사합니다. 제가하려는 것은 .wav 파일 (짧은 오디오 만)을 가져 와서 int로 변환하는 것입니다. 모든 파일은 오디오 톤을 나타냅니다. 왜냐하면 제가 arduino 프로젝트를하고 있고 arduino가 노래를 연주하도록 만들고 싶기 때문입니다. 그렇게하려면 모든 int가 톤인 int 배열이 필요합니다. 그래서 저는 "저는 .wav 파일을 멜로디 음표를 나타내는 정수가 저장된 txt로 변환하는 작은 응용 프로그램을 프로그래밍하면이 값을 arduino 프로젝트 코드에 복사하면됩니다"라고 생각했습니다. 그래서이 모든 후에 "당신의 문제는 무엇입니까?"라고 물을 수도 있습니다. 코드를 작성하고 "작동 중"입니다. 유일한 문제는 txt가 각 줄에 "1024"만 있다는 것입니다 ... 그래서 분명히 문제가있는 것입니다.
package WaveToText;
import java.io.*;
/**
*
* @author Luis Miguel Mejía Suárez
* @project This porject is to convert a wav music files to a int array
* Which is going to be printed in a txt file to be used for an arduino
* @serial 1.0.1 (05/11/201)
*/
public final class Converter
{
/**
*
* @Class Here is where is going to be allowed all the code for the application
*
* @Param Text is an .txt file where is going to be stored the ints
* @Param MyFile is the input of the wav file to be converted
*/
PrintStream Text;
InputStream MyFile;
public Converter () throws FileNotFoundException, IOException
{
MyFile = new FileInputStream("C:\\Users\\luismiguel\\Dropbox\\ESTUDIO\\PROGRAMAS\\JAVA\\WavToText\\src\\WaveToText\\prueba.wav");
Text = new PrintStream(new File("Notes.txt"));
}
public void ConvertToTxt() throws IOException
{
BufferedInputStream in = new BufferedInputStream(MyFile);
int read;
byte[] buff = new byte[1024];
while ((read = in.read(buff)) > 0)
{
Text.println(read);
}
Text.close();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IOException{
// TODO code application logic here
Converter Exc = new Converter();
Exc.ConvertToTxt();
}
}
Wait wait wait ..... 많은 것들이 여기에 없습니다 .... Arduino가 노트 번호를 예상하기 때문에 바이트를 읽고 Arduino로 보낼 수 없습니다. Wav 파일의 숫자는 먼저 오디오 정보가있는 "헤더"이고 다음으로 신호의 개별 지점을 나타내는 숫자 (Waveform)입니다. 노트를 얻으려면 피치 감지 또는 음악 필사를위한 알고리즘이 필요합니다.
음조 감지는 음악이 단음이거나 단음에 가까운 경우 작동 할 수 있습니다. 풀 밴드 곡의 경우 번거 롭습니다.
그래서...
"Arduino 부분"이 모노 음악을 연주 할 것 같고 특정 시간 순간에 신호의 기본 주파수를 추출해야합니다 (이를 피치 감지라고하며이를 수행하는 다른 방법이 있습니다 (자기 상관, amdf, 스펙트럼 분석)). . 또한 메모의 타이밍을 유지해야합니다.
주파수를 추출 할 때 주파수를 피아노의 음표 번호를 나타내는 정수로 변환하는 공식이 있습니다. n = 12 (log2 (f / 440)) + 49 여기서 n은 정수 음표 번호이고 f는 음표의 기본 주파수입니다. 계산하기 전에 피치 인식 알고리즘에서 얻은 주파수를 가장 가까운 주파수 (정확한 음표 주파수는 Google)로 양자화해야합니다.
그러나 나는 더 많은 연구를 할 것을 정말로 제안합니다. 연주하는 악기, 드럼, 가수가 거의없는 음악에서 음을 감지하는 것은 정말 어려울 것입니다 ....
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다