디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

잘 생긴 횽들아! 내 글 좀 봐죠.

문맥(210.95) 2009.08.06 17:07:35
조회 114 추천 0 댓글 6

.wav파일을 읽어서 data를 decode하기전에 audio play하는 코드데,
소리에서 잡음이 섞어 나오네, 왜 그러는지 좀 봐죠.

 

static int
get_audio(lame_global_flags * const gfp, int buffer[2][1152])
{
    int     num_channels = lame_get_num_channels(gfp);
    int     insamp[2 * 1152];
    int     samples_read;
    int     framesize;
    int     samples_to_read;
    unsigned int remaining, tmp_num_samples;
    int     i;
    int    *p;

    /*
     * NOTE: LAME can now handle arbritray size input data packets,
     * so there is no reason to read the input data in chuncks of
     * size "framesize".  EXCEPT:  the LAME graphical frame analyzer
     * will get out of sync if we read more than framesize worth of data.
     */

    samples_to_read = framesize = lame_get_framesize(gfp);
    assert(framesize <= 1152);

    /* get num_samples */
    tmp_num_samples = lame_get_num_samples(gfp);

    /* if this flag has been set, then we are carefull to read
     * exactly num_samples and no more.  This is useful for .wav and .aiff
     * files which have id3 or other tags at the end.  Note that if you
     * are using LIBSNDFILE, this is not necessary
     */
    if (global.count_samples_carefully) {
        remaining = tmp_num_samples - Min(tmp_num_samples, global.num_samples_read);
        if (remaining < (unsigned int) framesize && 0 != tmp_num_samples)
            /* in case the input is a FIFO (at least it\'s reproducible with
               a FIFO) tmp_num_samples may be 0 and therefore remaining
               would be 0, but we need to read some samples, so don\'t
               change samples_to_read to the wrong value in this case */
            samples_to_read = remaining;
    }

    if (is_mpeg_file_format(input_format)) {
        if (buffer != NULL)
            samples_read = read_samples_mp3(gfp, global.musicin, buf_tmp16);
        else
            samples_read = read_samples_mp3(gfp, global.musicin, buffer16);
        if (samples_read < 0) {
            return samples_read;
        }
    }
    else {
        samples_read = read_samples_pcm(global.musicin, insamp, num_channels * samples_to_read);
        if (samples_read < 0) {
            return samples_read;
        }
        p = insamp + samples_read;
        samples_read /= num_channels;
        if (buffer != NULL) { /* output to int buffer */
            if (num_channels == 2) {
                for (i = samples_read; --i >= 0;) {
                    buffer[1][i] = *--p;
                    buffer[0][i] = *--p;
                }
            }
            else if (num_channels == 1) {
                memset(buffer[1], 0, samples_read * sizeof(int));
                for (i = samples_read; --i >= 0;) {
                    buffer[0][i] = *--p;
                }
            }
            else
                assert(0);
        }
        else {          /* convert from int; output to 16-bit buffer */
            if (num_channels == 2) {
                for (i = samples_read; --i >= 0;) {
                    buffer16[1][i] = *--p >> (8 * sizeof(int) - 16);
                    buffer16[0][i] = *--p >> (8 * sizeof(int) - 16);
                }
            }
        }
    }

  


    /* if num_samples = MAX_U_32_NUM, then it is considered infinitely long.
       Don\'t count the samples */
    if (tmp_num_samples != MAX_U_32_NUM)
        global. num_samples_read += samples_read;

    return samples_read;
}

-----------------------------------------------------------------------
static int
lame_encoder(lame_global_flags * gf, FILE * outf, int nogap, char *inPath, char *outPath)
{
    unsigned char mp3buffer[LAME_MAXMP3BUFFER];
    int     Buffer[2][1152];
    int     iread, imp3, owrite, id3v2_size;

 


    static HWAVEOUT     hWaveOut ;
    static PBYTE        pBuffer ;
    static PWAVEHDR     pWaveHdr ;
    static WAVEFORMATEX waveformat ;
    MMRESULT     rc;                                               
    char         sError[129];

 

 


    encoder_progress_begin(gf, inPath, outPath);

    imp3 = lame_get_id3v2_tag(gf, mp3buffer, sizeof(mp3buffer));
    if ((size_t)imp3 > sizeof(mp3buffer)) {
        encoder_progress_end(gf);
        error_printf("Error writing ID3v2 tag: buffer too small: buffer size=%d  ID3v2 size=%d\\n"
                , sizeof(mp3buffer)
                , imp3
                    );
        return 1;
    }
    owrite = (int) fwrite(mp3buffer, 1, imp3, outf);
    if (owrite != imp3) {
        encoder_progress_end(gf);
        error_printf("Error writing ID3v2 tag \\n");
        return 1;
    }
    if (flush_write == 1) {
        fflush(outf);
    }   
    id3v2_size = imp3;

 

 

    do {
        /* read in \'iread\' samples */
        iread = get_audio(gf, Buffer);

  pWaveHdr = malloc (sizeof (WAVEHDR)) ;
  pBuffer  = malloc (4096) ;

  if (!pWaveHdr || !pBuffer)
  {
   if (!pWaveHdr) free (pWaveHdr) ;
            if (!pBuffer)  free (pBuffer) ;

            return TRUE ;
  }
   
        waveformat.wFormatTag      = WAVE_FORMAT_PCM ;
        waveformat.nChannels       = 2 ;
        waveformat.nSamplesPerSec  = 44100 ;
        waveformat.nAvgBytesPerSec = 176400 ;
        waveformat.nBlockAlign     = 4 ;
        waveformat.wBitsPerSample  = 16 ;
        waveformat.cbSize          = 0 ;
                        
        if (waveOutOpen (&hWaveOut, WAVE_MAPPER, &waveformat,
                                     0, 0, WAVE_ALLOWSYNC) != MMSYSERR_NOERROR)
        {
            free (pWaveHdr) ;
            free (pBuffer) ;

            hWaveOut = NULL ;
            return TRUE ;
        }
        pWaveHdr->lpData          = (LPSTR) Buffer;
        pWaveHdr->dwBufferLength  = 4096 ;
        pWaveHdr->dwBytesRecorded = 0 ;
        pWaveHdr->dwUser          = 0 ;
        pWaveHdr->dwFlags         = 0 ;
        pWaveHdr->dwLoops         = 1 ;
        pWaveHdr->lpNext          = NULL ;
        pWaveHdr->reserved        = 0 ;
                   
        waveOutPrepareHeader (hWaveOut, pWaveHdr,
                                          sizeof (WAVEHDR)) ;

        rc = waveOutWrite (hWaveOut, pWaveHdr, sizeof (WAVEHDR)) ;
        waveOutClose (hWaveOut) ;
        waveOutGetErrorText(rc, sError, 128);   
        error_printf("mp3 internal error:  error code=%s\\n", sError);

 } while (iread > 0);
return 0;
}

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 끝까지 다 본 걸 후회하게 만든 용두사미 드라마는? 운영자 25/07/07 - -
282132 짜장 곱배기 먹고 졸릴거 같아서 2900원이나 주고 레드불을 쳐먹었어 [4] 꼬꼬월드갤로그로 이동합니다. 11.10.19 71 0
282130 벌레 무시하냐!!! [3] Raid(220.90) 11.10.19 71 0
282129 아악 벌레가 돌아다닌다!!!! [2] 거칠게갤로그로 이동합니다. 11.10.19 91 0
282128 요즘엔 거의 다 이런가.. [3] ,.,.,갤로그로 이동합니다. 11.10.19 46 0
282127 아오 리눅스 깔았더니 윈도 부팅 안됨 [5] 거칠게갤로그로 이동합니다. 11.10.19 90 0
282126 directx 쓰는 사람있슴? _영등포주민_갤로그로 이동합니다. 11.10.19 37 0
282124 N후보의 TV토론을 보면 [5] 분당살람갤로그로 이동합니다. 11.10.19 113 0
282123 아 연금복권 이나 당첨됬으면 좋겠다.... AnonyMous갤로그로 이동합니다. 11.10.19 32 0
282122 자의식과잉이란? [1] 1(121.182) 11.10.19 64 0
282121 vi 쓸때 말이야 [8] 돌아이바갤로그로 이동합니다. 11.10.19 91 0
282118 형들은 여가시간 어떻게 보내? [8] ,.,.(222.121) 11.10.19 87 0
282117 스펠 2.8 있는사람 좌표좀 썌워줘 [1] 1(118.220) 11.10.19 85 0
282116 sql 과제 [1] 이모군(175.114) 11.10.19 52 0
282115 어떻하지 [2] ㅇㅁㅇㄴㄹ(149.159) 11.10.19 58 0
282114 나 최근 꼬릿말 생김!! [3] blackd갤로그로 이동합니다. 11.10.19 87 0
282113 횽들도 나처럼 되기 전에 제때 잘챙겨 먹어. [5] blackd갤로그로 이동합니다. 11.10.19 124 0
282112 printf write 함수차이점?? [1] 우월한키갤로그로 이동합니다. 11.10.19 56 0
282111 오오.. 안드로이드 개발자 페이지에 아이스크림샌드위치 api 생겼네.. [3] asdf(121.155) 11.10.19 90 0
282110 우와.. 4.0 빵또아 대박이네 api 공부할거 수도없이 늘어날듯 [2] ?(124.199) 11.10.19 86 0
282109 안드로이드 ICS 라이브로 설명하고 있네.. [1] asdf(121.155) 11.10.19 37 0
282108 형들 어셈블리하고 리눅스를 공부하려고 하는데요 [6] Dawnwalkre갤로그로 이동합니다. 11.10.19 113 0
282107 문서로 넘어오는 한글이 깨져서 글을 볼수가 없습니다 ㅠ,.ㅠ [4] 다음(112.156) 11.10.19 103 0
282104 형님들 방학때 공부할려고 하는데; [6] Re-FEEL갤로그로 이동합니다. 11.10.19 94 0
282103 left recursion 없애기 [1] 즐쿰갤로그로 이동합니다. 11.10.19 55 0
282102 cpp 물어볼게 있습니다. [12] 듣보잡이(220.149) 11.10.19 100 0
282101 어떻게 mssql에서 따옴표를 이스케이프 합니까? [1] ㅁㄴㄻㄹ갤로그로 이동합니다. 11.10.19 114 0
282100 c++ 이용한 프로그래밍 도와주실분 [6] 1212(220.149) 11.10.19 122 0
282099 오렐리에서 발간한 e-book 로하로하알로하갤로그로 이동합니다. 11.10.19 51 0
282098 자바 질문입니다 [1] 123(210.218) 11.10.19 41 0
282096 php에서 request 받는데 질문이 있엉 [4] 허허벌판갤로그로 이동합니다. 11.10.19 77 0
282095 기존행렬과 전치행렬의 고유값은 같은가요? [1] 534F444D61737465갤로그로 이동합니다. 11.10.19 117 0
282093 (PHP, MySQL 관련)웹 개발 질문 - 내용이 조금 김 [16] 경영학도(183.96) 11.10.19 168 0
282092 노트북 팔았다 ㅋ [2] elwlwlwk갤로그로 이동합니다. 11.10.19 90 0
282091 madcat_mk2횽 짱임 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ [1] 23424(222.232) 11.10.19 45 0
282089 아하.. v 가 뻐큐처럼 보이는구나. [3] iljeomobolt갤로그로 이동합니다. 11.10.19 85 0
282088 오늘의 수학문제 1) 20 / y = 36 에서 y는? [21] Stan(110.174) 11.10.19 148 0
282087 v가 뒤어져서 빠큐처럼 보이긴 하는데. [2] 534F444D61737465갤로그로 이동합니다. 11.10.19 57 0
282086 밑에 민원 신고 봐라 [1] 로하로하알로하갤로그로 이동합니다. 11.10.19 68 0
282085 재밋는 문장이다. [2] 로하로하알로하갤로그로 이동합니다. 11.10.19 67 0
282084 요번주 넥슨 공채 필기 보러가는사람 [1] 서버플머갤로그로 이동합니다. 11.10.19 110 0
282083 가위바위보프로그램인데 [1] 23424(222.232) 11.10.19 64 0
282082 민원 신고 완료 ㅋㅋㅋㅋ [16] iljeomobolt갤로그로 이동합니다. 11.10.19 670 0
282081 사랑하는 여자가 암이라면.. 너네는 어떻게 할래?? [5] 쿄스케갤로그로 이동합니다. 11.10.19 140 0
282080 저런옷입고 저런 포즈 어떻게 생각하냐? [7] iljeomobolt갤로그로 이동합니다. 11.10.19 155 0
282079 갤러들아 나에게 힘을줘 [2] 534F444D61737465갤로그로 이동합니다. 11.10.19 46 0
282076 이진트리구조에 대해 질문 [2] dp(121.186) 11.10.19 81 0
282075 페도라 리눅스15를 깔고 개발 패키지 까는 중!! [2] 거칠게갤로그로 이동합니다. 11.10.19 49 0
282074 아오 내일부터 시험이다!!! [2] 회색사과갤로그로 이동합니다. 11.10.19 40 0
282073 음.. 3년제 좆문대다니는데 어떻게 해야 졸업후에 그나마 성공할수있을까? [3] 버리는캐갤로그로 이동합니다. 11.10.19 136 0
282072 2의 보수 -1 표현할 수 있는 최소 비트 수 몇일까 [1] !457♥8(211.246) 11.10.19 74 0
뉴스 가수 KCM, 셋째 아빠 된다 디시트렌드 10:00
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2