2013-09-04 2 views
2

소켓을 사용하여 네트워크를 통해 오디오 파일의 내용을 다른 시스템으로 보내고 싶습니다. 두 시스템 모두 Windows 운영 체제에서 실행됩니다. 오디오 내용을 C++ 배열 또는 Stringstream 데이터 형식에 저장하는 방법에 대한 자습서가있어 다른 노드로 보내기 쉽습니다.오디오 파일을 배열/stringstream에 저장 C++

기본적으로 오디오 파일에서 데이터 바이트를 추출하는 방법을 알고 싶습니다.

답변

1

가장 쉬운 방법은 단순히 데이터 청크로 데이터를 보내는 것입니다. 오디오 파일로 시작하는 경우 file = fopen(filename, "rb");과 같은 다른 이진 파일처럼 열면됩니다 (여기서 filename은 오디오 파일의 이름입니다). 그런 다음 파일 끝에 도달 할 때까지 루프를 입력하여 바이트 청크를 읽습니다. bytes_read = fread(buffer, sizeof(char), read_size, file);과 같은 것을 사용하십시오. buffer은 최소한 char 크기 (예 : 1024) 일 수 있습니다. 각 fread 이후에 네트워크로 전화를 걸 수 있습니다. 또는 전체 파일을 먼저 읽은 다음 청크별로 청크로 보낼 수 있습니다. 너의 전화. 어느 쪽이든, 파일의 끝에 도달하면 끝까지 도달 한 신호를 보냅니다. 수신 시스템에서 이러한 청크를 가져와 fwrite으로 전화하여 새 오디오 파일을 만들어야합니다. 끝나기 전까지 모든 청크를 첨부하거나 모두 청크 할 수 있습니다.

+0

예. 하지만 나는 오디오 파일 (예 : mp3 파일)에서 데이터 바이트를 추출하는 방법을 모른다. – Vigo

+0

fopen (바이너리로), fread 또는 다른 일반적인 파일 읽기 방법. 오디오 파일을 임의의 이진 데이터로 가장 할 수도 있습니다. 대부분의 경우, 텍스트 파일 인 것처럼 가장 할 수 있지만, 'fopen'과 같은 몇몇 것들은 바이너리와 텍스트를 다르게 취급합니다. – patrickvacek

+0

그 설명은 훌륭했습니다! 매번 재생하기 전에 파일에 써야합니까? 또는 버퍼에서 직접 재생할 수있는 방법이 있습니까? 이것에 대한 어떤 생각? – Vigo

관련 문제