나는 오디오 파일을 동시에 재생하고 녹음해야하는 지난 며칠 동안 내 앱의 일부로 작업 해 왔습니다. 달성해야 할 작업은 녹음 된 오디오 파일을 녹음 된 파일과 비교하여 일치하는 비율을 반환하는 것입니다. 여기에 지금까지 무엇을했는지 그리고 내 질문에 어떤 컨텍스트 : 대상 API는 내가 파일FFT (Android Studio)를 사용하여 두 개의 오디오 파일 매칭
를 디코딩 단순화하기 위해 .wav 오디오 파일 형식을 사용하기로 결정> 15
입니다
내 오디오 파일을 전달하고- 내가 '일치하는 분석을 수행하기 위해 PCM으로 변환하기 위해 결정자 클래스를 만들어 내가 오디오 파일
- 재생을위한 녹음 및 MediaPlayer를 위해 가지 audiorecord을 사용하고
- 오디오 파일을 디코더에 전달한 후 FFT 클래스로 전달하여 주파수 도메인 데이터를 가져옵니다 (CHANNEL_MONO, 16 BIT, SAMPLE_RATE = 44100)
- 내 분석에 필요합니다. 내가 가지 audiorecord를 사용하여 오디오를 기록 할 때
- , 기본적으로 포맷 PCM이 아니면이 몇 가지 방법을 지정해야 할 아래
그리고
내가 가진 몇 가지 질문입니까?
- 나는 일치하는 분석을 수행하기 위해 주파수 도메인 데이터를 얻기 위해 FFT 클래스에 녹음을 전달하려고합니다. 녹음을 사용자의 장치에 저장하지 않고이 작업을 수행 할 수 있습니까?
- 두 파일 모두에 대해 FFT 분석을 수행 한 후에는 일치하는 분석을 수행하기 위해 텍스트 파일에 데이터를 저장해야합니까? 어떤 옵션이나 가능한 방법은 무엇입니까?
- 상당량의 조사를 한 후에 내가 찾은 모든 출처는 녹음 자료를 데이터베이스에 포함 된 노래/음악과 일치시키는 법을 다룹니다. 내 목표는 두 개의 특정 오디오 파일이 얼마나 밀접하게 결합되어 있는지 확인하는 것입니다. 어떻게하면됩니까? - 내 목표를 달성하기 위해 해시 함수를 만들거나 사용해야합니까? 이에 대한 자세한 대답은 정말 도움이 될 것입니다.
- 현재 녹음을위한 별도의 스레드가 있습니다. 오디오 파일을 디코딩하기위한 별도의 활동; FFT 분석을위한 별도의 활동. 필자는 별도의 스레드 또는 AsyncTask에서 일치하는 분석을 실행할 계획입니다. 이 구조가 최적이라고 생각하십니까? 아니면 더 좋은 방법이 있습니까? 또한 오디오 파일을 별도의 스레드에서 디코더로 전달해야합니까? 아니면 녹음 스레드 또는 MatchingAnalysis 스레드에서 할 수 있습니까?
- 일치하는 비교를 수행하기 전에 오디오 파일에 대한 작업에서 윈도우 작업을 수행해야합니까?
- .wav 파일을 디코딩해야하나요 아니면 2 개의 .wav 파일을 직접 비교할 수 있습니까?
- 비교하기 전에 오디오 파일에 대해 낮은 피칭 작업을 수행해야합니까?
- 내 일치 비교를 수행하려면 정확히 어떤 데이터를 생성해야합니까 (파워 스펙트럼, 에너지 스펙트럼, 스펙트로 그램 등)?
나는 올바른 방향으로 가고 있습니까? 아니면 뭔가 빠져 있습니까?
들으 셨습니다. 모바일 장치에서이 작업을 수행하려고 생각하기 전에 데스크톱 컴퓨터에서 실행되는 동안 두 개의 웨이브 파일을 전달할 때 좋은 작업을 수행 할 수있는 알고리즘을 개발해야합니다. 예를 들어, 알 수없는 지체로만 다른 두 개의 동일한 파일 * (현실 세계에서는 결코 찾을 수 없지만 논증의 목적으로)을 어떻게 처리 할 것인지 예를 고려해보십시오. 안드로이드 오디오 스택 삽입 지연을 더 잘 믿어야했습니다! 이제 지연, 잡음 및 다양한 주파수 응답의 조합을 고려하십시오. 이제 방 에코를 추가하십시오 .... –
@ChrisStratton 지연은 슬라이딩 창을 추가하거나 트리밍/두 신호를 잘라내서 길이가 일치하므로 해결할 수 있다고 생각하십니까? 아니면 해시 함수를 사용하면 시간 지연을 무시할 수 있습니까? – Zack
테스트 데이터 레코딩 세트를 수집하고 알고리즘을 작성하고 점수를 매기는 방법을 생각해냅니다. 그런 다음 데이터 수집을 위해 사용 (전화 마이크는 컴퓨터와 다릅니다)하고, 테스트 환경에서 좋은 결과를 얻을 때까지 모바일 장치를 터치하지 마십시오. –