wav파일 속도2배속하는 코드 질문합니다!

kart의 이미지

안녕하세요 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배속을 하는 방법을 사용하였습니다. 그런데 컴파일해보니 노래는안나오고 치지직하는 소리만들리더군요. 왜 안되는 거고 어떻게 수정해야하는지요ㅠㅠ

gilgil의 이미지

format이 8bit인 경우에는 바이트 단위로 잘라서 처리해야 하고
format이 16bit인 경우에는 2바이트 단위로 잘라서 처리해야 겠죠.

kart의 이미지

감사합니다~

shint의 이미지


되기는 하는데. 정확한지는 잘 모르겠습니다.

사운드 프로그래밍 관련 책을 보시기를 추천드립니다.

녹음 이라기보다는 wav 파일을 wav 2배속 파일로 복사하는 프로그램입니다.

자세한 사항은 파일로 첨부합니다.

댓글 첨부 파일: 
첨부파일 크기
Package icon test wav파일 2배속 녹음하기.zip1.64 MB

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

kart의 이미지

아아 read_data를 2곱하는게아니라 r을 2로나눠야 하는군요.. 왜안되나 계속고민하고있었는데 큰 도움이 되었습니다. 감사합니다!

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.