wav파일 속도2배속하는 코드 질문합니다!
글쓴이: kart / 작성시간: 토, 2015/12/05 - 10:02오후
안녕하세요 wav파일의 속도를2배빠르게 하는 코드를 작성하고 싶은데요
일단 코드에서
#include <stdlib.h> #include <string.h> #include <stdio.h> typedef unsigned short uint16_t; typedef unsigned int uint32_t; typedef int int16_t; typedef unsigned char byte; typedef struct { char chunk_id[4]; uint32_t chunk_size; char format[4]; char fmtchunk_id[4]; uint32_t fmtchunk_size; uint16_t audio_format; uint16_t num_channels; uint32_t sample_rate; uint32_t byte_rate; uint16_t block_align; uint16_t bps; char datachunk_id[4]; uint32_t datachunk_size; }WavHeader; int total_file_len = 0; void wav_read(char * file_name, WavHeader * header, byte ** real_data) { FILE * fp; int len; fp = fopen(file_name, "rb"); len = fread(header, 1, sizeof(WavHeader), fp); total_file_len += len; (*real_data) = (byte *)malloc(header->datachunk_size); len = fread(*real_data, 1, header->datachunk_size, fp); total_file_len += len; fclose(fp); } void wav_write(char * file_name, WavHeader * header, byte * real_data) { FILE * fp; header->datachunk_size /= 2; fp = fopen(file_name, "wb"); fwrite(header, sizeof(WavHeader), 1, fp); byte *r = (byte *)malloc(header->datachunk_size); // for(int i = 0; i< header->datachunk_size; i++) // { *(r+i) = *(real_data + 2*i); //이부분!! } fwrite(r,header->datachunk_size , 1, fp); free(r); fclose(fp); } int main() { WavHeader header; //헤더 byte * real_data; //소리데이터 wav_read("a.wav", &header, &real_data); wav_write("write.wav", &header, real_data); free(real_data); return 0; }
주석 친 부분보시면 일단 r이라는 공간할당하고 거기에 wav_read에서 소리데이터를 할당한 read_data의 정보를 read_data[0],read_data[2],read_data[4]이런식으로 할당하여 2배속을 하는 방법을 사용하였습니다. 그런데 컴파일해보니 노래는안나오고 치지직하는 소리만들리더군요. 왜 안되는 거고 어떻게 수정해야하는지요ㅠㅠ
Forums:
gilgil.net
format이 8bit인 경우에는 바이트 단위로 잘라서 처리해야 하고
format이 16bit인 경우에는 2바이트 단위로 잘라서 처리해야 겠죠.
www.gilgil.net
감사합니다~
감사합니다~
참고해보세요.
되기는 하는데. 정확한지는 잘 모르겠습니다.
사운드 프로그래밍 관련 책을 보시기를 추천드립니다.
녹음 이라기보다는 wav 파일을 wav 2배속 파일로 복사하는 프로그램입니다.
자세한 사항은 파일로 첨부합니다.
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
-
아아 read_data를 2곱하는게아니라 r을 2로나눠야 하는군요.. 왜안되나 계속고민하고있었는데 큰 도움이 되었습니다. 감사합니다!
댓글 달기