디시인사이드 갤러리

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

갤러리 본문 영역

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

문맥(210.95) 2009.08.06 17:07:35
조회 113 추천 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 - -
282038 밑에 233한테 준다. [2] 코코(112.161) 11.10.18 40 0
282037 Linking... 중에 멈춰 버리는경우 [7] Kkobuk갤로그로 이동합니다. 11.10.18 53 0
282036 어후 최신공업수학 책 다 공부하려는건 미친짓일까. [1] 534F444D61737465갤로그로 이동합니다. 11.10.18 71 0
282034 부탁인데 이것만 좀 ㅠㅠ 굽싡 [7] 233(222.232) 11.10.18 75 0
282032 예전에는 프갤 횽들이~ 1234(110.11) 11.10.18 32 0
282031 근데 프린트f 는 뭐가 좋아? [5] 회색사과갤로그로 이동합니다. 11.10.18 74 0
282030 횽들 자바스크립트로 ftp 주소에 텍스트 파일 저장할 수 있긴 한거야?? [2] 순록(175.211) 11.10.18 76 0
282028 쉐이더만지작거리는횽들있나? [4] AS3.0갤로그로 이동합니다. 11.10.18 55 0
282027 횽드라 도와주세요 ㅠㅠ chobo(115.21) 11.10.18 33 0
282026 c프로그래밍 할때 USB에 workspace 만들고 컴파일하면서 하는데요 [4] Kkobuk갤로그로 이동합니다. 11.10.18 67 0
282025 c만 파기 vs 정보처리기사와 c같이 파기 [2] 오마이갓넬갤로그로 이동합니다. 11.10.18 61 0
282024 나도내일컴파일러시험인데!!! [8] 즐쿰갤로그로 이동합니다. 11.10.18 84 0
282023 제일 안 잘꺼 같은 갤러리인 프갤이 [2] 카레맛카레갤로그로 이동합니다. 11.10.18 77 0
282021 파워한 퇴갤 [1] y녀6디리(220.118) 11.10.18 45 0
282020 전공에 경제가 들어있다니 이게 무슨... [1] Aven갤로그로 이동합니다. 11.10.18 36 0
282018 사장과 면접시 사장이 이런말 하면 절대 가지마라. [2] 거칠게갤로그로 이동합니다. 11.10.18 159 0
282017 c에서 제곱근하는법좀 알려주긔ㅠㅠ [7] 흫흫흫흫갤로그로 이동합니다. 11.10.18 92 0
282016 게임에서 오토핫키로 이미지서치하면서 이동하려면 무슨 명령어가 필요하나요 룰루(124.49) 11.10.18 369 0
282015 왜 우리나라에는 노블리스 오블리제가 없는가?? [5] 거칠게갤로그로 이동합니다. 11.10.18 88 0
282014 컴공의 의미가 이상해짐 [16] [성대아싸]갤로그로 이동합니다. 11.10.18 316 0
282013 프갤러드라 궁금한게 잇어.. 과학이야 [7] 로하로하알로하갤로그로 이동합니다. 11.10.18 65 0
282012 대기업 들어가는 법 알려준다. [10] 거칠게갤로그로 이동합니다. 11.10.18 268 0
282010 C#좀 도와줘요 ㅠㅠ [6] Sayrin갤로그로 이동합니다. 11.10.18 65 0
282009 소스날린 충격이 컷나보다...어휴... [2] 三didas갤로그로 이동합니다. 11.10.18 64 0
282008 나같이 창의력이 넘치는 사람은 어디 밑에 들어가면 안된다!! [2] 거칠게갤로그로 이동합니다. 11.10.18 65 0
282007 고스트 제대로 쓸줄도 모르면서 안쓰고 냅두니까 이년이 블루스크린 자꾸냄 Stan(110.174) 11.10.18 44 0
282006 얘 누군지 아는사람 [5] y녀6디리(220.118) 11.10.18 123 0
282005 javah 가지고 별지랄 다 떠는 현 상황...도와주십쇼.. 코코(112.161) 11.10.18 46 0
282002 한국 IT 관련 대학교에 권하는 커리큘럼 [2] 거칠게갤로그로 이동합니다. 11.10.18 151 0
282001 대기업 들어갈려면 카레맛카레갤로그로 이동합니다. 11.10.18 57 0
282000 대기업 들어가면 로하로하알로하갤로그로 이동합니다. 11.10.18 39 0
281999 그래서 OS는? 카레맛카레갤로그로 이동합니다. 11.10.18 67 0
281998 뭘 모르는데 네이버가 학력주의 쩔지 [1] 카레맛카레갤로그로 이동합니다. 11.10.18 106 0
281997 이번 이월된 로또를 나혼자 당첨된다면? [1] 거칠게갤로그로 이동합니다. 11.10.18 57 0
281996 컴공과 따위 없애고 걍 필요한 기업이 네이버 아카데미처럼 뽑아서 썼으면 [3] 꼬꼬월드갤로그로 이동합니다. 11.10.18 116 0
281995 애플이 흥하는게 아직도 사내에서 벤처문화를 유지하고 있어서라고 [3] Hello World갤로그로 이동합니다. 11.10.18 114 0
281994 플밍갤 능력자분들 도와주세여 헠헠 [2] 헠ㅎ커(121.140) 11.10.18 116 0
281993 요즘 대학교는 답이 없다 교수진 전부 잘라야 한다!! [3] 거칠게갤로그로 이동합니다. 11.10.18 122 0
281992 형님들, 걍 뻘글인데... [2] Re-FEEL갤로그로 이동합니다. 11.10.18 28 0
281990 MS 곧 야후 테크탈듯 [3] Hello World갤로그로 이동합니다. 11.10.18 71 0
281989 아..형들 소스날리고나서 계속 복구중인데 기억이안나 [3] 三didas갤로그로 이동합니다. 11.10.18 48 0
281988 100억 있으면 누가 코딩질 하고 앉아있겠냐! 꼬꼬월드갤로그로 이동합니다. 11.10.18 68 0
281987 로또 100억 당첨되면 [3] 카레맛카레갤로그로 이동합니다. 11.10.18 62 0
281986 북괴들은 OS만드는데 우리나라는 왜 못만듬 ㅡㅡ? 쓰레기네 [6] 늅늅(115.23) 11.10.18 74 0
281982 우리나라에서 크롬북 좆망할 수 밖에 없는게 Hello World갤로그로 이동합니다. 11.10.18 89 0
281980 여기 아이폰 보호 필름 물어봐도 되나? [1] 로하로하알로하갤로그로 이동합니다. 11.10.18 33 0
281979 다들 졸작으로 os 제작해서 내봐라 바로 대기업에서 연락온다. [3] 거칠게갤로그로 이동합니다. 11.10.18 193 0
281978 요즘 언어중에서 C기반이 아닌 순수 기계어나 어셈블리 기반으로 제작된 [3] 꼬꼬월드갤로그로 이동합니다. 11.10.18 74 0
281977 헐 프갤 언어 진짜 있음? [1] 카레맛카레갤로그로 이동합니다. 11.10.18 65 0
281976 이 참에 걍 언어도 하나 만들자 [2] 카레맛카레갤로그로 이동합니다. 11.10.18 47 0
뉴스 “아내가 야한 속옷 입고, 피임도구 챙겨서 등산을 갑니다” 디시트렌드 07.07
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2