디시인사이드 갤러리

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

갤러리 본문 영역

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

문맥(210.95) 2009.08.06 17:07:35
조회 109 추천 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
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 비난 여론에도 뻔뻔하게 잘 살 것 같은 스타는? 운영자 24/06/03 - -
153651 김유식씨는 생각이 깊은 사람일거야 [2] CP(118.221) 09.10.22 83 0
153649 아 히밤 모르겠다. [1] JuEUS-U갤로그로 이동합니다. 09.10.22 64 0
153642 플래쉬에 php 연동법 어케해? 삼디다스(61.72) 09.10.22 72 0
153641 요즘은 돌잔치에 보통 무슨 선물 사가나요? [8] 혼아갤로그로 이동합니다. 09.10.22 85 0
153640 근데 유식대장이 돈을 횡령한건 사실? [2] 이모군(118.222) 09.10.22 105 0
153639 악플ㄴㄴㄴ [10] ㅂㄷㅈㅂㄷㅈ(121.187) 09.10.22 102 0
153637 마법소녀 아사다 마오 [11] 숙신갤로그로 이동합니다. 09.10.22 237 0
153636 정적이 심하다. [3] 혼아갤로그로 이동합니다. 09.10.22 101 0
153635 ㅇㅇ의 비쥬얼베이직6 문제는 마치 이것과 같다 [3] 아주아슬갤로그로 이동합니다. 09.10.22 92 0
153634 물질만능주위사회 가치관이 혼란스럽다. [5] d(115.92) 09.10.22 108 0
153632 컴맹에 대한 개념좀 세워주실 분 계신가요? [9] 왕초보(58.121) 09.10.22 130 0
153631 다들 유식의 공지는 보고 디씨질임?? [3] Vita500갤로그로 이동합니다. 09.10.22 132 0
153630 비쥬얼베이직6 인데 훃들 답좀... [6] ㅇㅇ(211.228) 09.10.22 112 0
153629 얏홍 스샷을 봤는데 [9] 숙신갤로그로 이동합니다. 09.10.22 137 0
153628 아악.....!!! 봐선 안될것을 보고야 말았어.....!!!!!!!!! [7] 숙신갤로그로 이동합니다. 09.10.22 159 0
153627 윈도우 7무료로 받기 [7] Vita500갤로그로 이동합니다. 09.10.22 248 0
153625 횽아들 질문좀 [7] 345345갤로그로 이동합니다. 09.10.22 74 0
153624 밑에 윈도우7 학생 슈퍼 굿딜. [3] JaHellWrong갤로그로 이동합니다. 09.10.22 134 0
153623 윈도우7 대학생이벤트 2~4만원에 판매 [8] Vita500갤로그로 이동합니다. 09.10.22 208 0
153622 횽등 Uplink 라는 해킹게임 해봣어??? [2] JaHellWrong갤로그로 이동합니다. 09.10.22 147 0
153621 우리 회사 아가씨들 [11] >_<(125.7) 09.10.22 239 0
153620 학과별 듣기싫은말에 대한 반응 .txt [13] 유리한갤로그로 이동합니다. 09.10.22 327 0
153619 방금 여자로 부터 문자 메시지가 왔다. [12] Vita500갤로그로 이동합니다. 09.10.22 228 0
153618 애아빠누구_레전드.jpg [5] 아주아슬갤로그로 이동합니다. 09.10.22 266 0
153617 학점의 폐해 츄도크갤로그로 이동합니다. 09.10.22 112 0
153616 javascript 문법 [33] 아잉따잉갤로그로 이동합니다. 09.10.22 218 0
153615 웹페이지 리다이렉션 되는거 어떻게 확인함?? [3] 쉼발갤로그로 이동합니다. 09.10.22 101 0
153614 떡밥 투척 [9] 유리한갤로그로 이동합니다. 09.10.22 216 0
153613 이력서 써봐야 연락도 안오고... [11] 닝기미(210.219) 09.10.22 214 0
153612 컴퓨터 그래픽스 질문 [7] 학생(125.128) 09.10.22 132 0
153609 원래 신입사원한테 [6] 에이스1번갤로그로 이동합니다. 09.10.22 202 0
153608 사람답게 살아보기. [17] yundream(211.189) 09.10.22 277 0
153607 웹브라우저에서 클라이언트 avi 재생시키려면 어떻게 해야 하나요? [5] av질문(58.79) 09.10.22 119 0
153604 제발 부탁요(2) [7] 아주아슬갤로그로 이동합니다. 09.10.22 118 0
153603 vc++ 여러줄을 #define으로 가능한가요? [3] 초보(114.205) 09.10.22 124 0
153602 탭 2로 바꿧어요! C언어 능력자님 헬프요 ㅠ [12] C언어(142.104) 09.10.22 168 0
153600 하루 12시간 넘게 근무했는데 휴일에 쓰러져서 산재 불인정.프로그래머얘기 [6] 빕뱟뱟갤로그로 이동합니다. 09.10.22 137 0
153599 나도 회사일 디시에 물어보는데 잇힝유후갤로그로 이동합니다. 09.10.22 55 0
153597 센프란시스코에서 열린 Windows7 런칭 행사 짤 [7] 숙신갤로그로 이동합니다. 09.10.22 135 0
153596 평생이 빛더미.txt [8] 개쉛기갤로그로 이동합니다. 09.10.22 202 0
153594 C언어 능력자님들 헬프 [4] C언어(142.104) 09.10.22 148 0
153593 내가 씨발 실력이 늘었나??? [2] 개쉛기갤로그로 이동합니다. 09.10.22 152 0
153591 숙제 물어보는 후배님들 [1] ㅇㅇㅃ갤로그로 이동합니다. 09.10.22 71 0
153589 vs2008 [2] DMW(220.68) 09.10.22 94 0
153588 나의 과제를 도와주실분ㅠㅠ 소정의 사례는 충분히 하겠어요 ~ [8] 잇힝(58.140) 09.10.22 127 0
153586 휴우 님은 봅니다. [5] 숙신갤로그로 이동합니다. 09.10.22 83 0
153585 뇌세척횽에 의한, 뇌세척횽만을 위한 뻘글 [3] algo갤로그로 이동합니다. 09.10.22 84 0
153584 이거 오류 왜 뜨는거임? [3] 후유(125.179) 09.10.22 75 0
153583 카레를 점심으로 먹었습니다.. [3] 잇힝유후갤로그로 이동합니다. 09.10.22 66 0
153582 횽들~ 어제 뉴비라고 소개한 뇌세척준비중임다~ 오늘도 질문 좀 할게여~ [3] 뇌세척준비중갤로그로 이동합니다. 09.10.22 92 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2