디시인사이드 갤러리

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

갤러리 본문 영역

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

문맥(210.95) 2009.08.06 17:07:35
조회 115 추천 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 - -
AD 디지털 액세서리 기간한정 세일! 운영자 25/07/11 - -
282463 요즘 AV배우 젖통령 누구임? [3] 다림줄갤로그로 이동합니다. 11.10.20 376 0
282462 형들 내가 자바 처음 공부해서 그런데 이게 왜 틀린거야?(매우짧음) [3] 자봐(108.35) 11.10.20 65 0
282461 프겔 잣뉴비들아 [1] ㄹㄷㅈㅍㅁ(121.169) 11.10.20 40 0
282460 공동 창업자(?)일단1명구함 ㅋㅋ(게임개발) [5] forhappiness갤로그로 이동합니다. 11.10.20 163 0
282458 이것봐... [5] 어떡해갤로그로 이동합니다. 11.10.20 75 0
282457 입사 두달만에 담주 퇴직 [5] 이메지네이션(116.124) 11.10.20 135 0
282455 프갤러들은 다 기만자 같다 [9] 얼빠진호랑이갤로그로 이동합니다. 11.10.20 148 0
282454 야 AV배우... 질내사정은 쫌 그러치않냐? [5] 다림줄갤로그로 이동합니다. 11.10.20 423 0
282452 어제 페도라 때문에 수많은 영화, 드라마가 날아갔지만 [2] 분당살람갤로그로 이동합니다. 11.10.20 67 0
282450 생각해보니 게이들이 성생활에선 유리하네.. [5] 쿄스케갤로그로 이동합니다. 11.10.20 544 0
282449 헤헤 방출 안하고도 여자보다 강하고 오래. [1] 534F444D61737465갤로그로 이동합니다. 11.10.20 85 0
282448 지구력이라.. [3] 534F444D61737465갤로그로 이동합니다. 11.10.20 69 0
282445 실제론 지구력이래... [1] blackd갤로그로 이동합니다. 11.10.20 98 0
282444 리눅스 고수형들 ...리눅스 문제...... 몇개만 ㅜㅜ [10] 으악새(121.151) 11.10.20 89 0
282443 여성이 좋아하는 남자의 ㅈㅈ은 어떤걸까? [6] blackd갤로그로 이동합니다. 11.10.20 177 0
282442 횽들 C언어도 귀로 들으면 모국어가 될 수있나요? [24] 다림줄갤로그로 이동합니다. 11.10.20 203 0
282441 스택이 [1] 수크라제갤로그로 이동합니다. 11.10.20 51 0
282439 리눅스 고수 형님들 리눅스 문제 답변좀~~~~ㅠㅠ(실시간모니터링중) [5] 으악새(121.151) 11.10.20 80 0
282438 오늘 역삼동 삼성SDS 멀티캠퍼스 식당 메뉴 [6] 다림줄갤로그로 이동합니다. 11.10.20 308 0
282436 제주도의 술집가면 [6] 즐쿰갤로그로 이동합니다. 11.10.20 114 0
282435 버스달릴때 문열어놓고 바람에 얼굴갖다대고 숨막히는거 즐기는 사람? [3] 534F444D61737465갤로그로 이동합니다. 11.10.20 75 0
282434 블리자드 입사해서 [1] 캔버스(149.159) 11.10.20 99 0
282433 나라에 망조가 드는구나 [2] 이메지네이션(116.124) 11.10.20 82 0
282432 다림질 너님 강의중이라면서 갤질해도 되는거냐 [1] 534F444D61737465갤로그로 이동합니다. 11.10.20 40 0
282431 이클립스는 빌드 제외 어떻게 시키냐? ㅍㅌ갤로그로 이동합니다. 11.10.20 40 0
282430 What are you sex? [1] 534F444D61737465갤로그로 이동합니다. 11.10.20 61 0
282429 오늘은 12시까지 출근인게 자랑 [12] monoless갤로그로 이동합니다. 11.10.20 115 0
282427 쿄스케님 계신가요~? [1] NIJ(125.187) 11.10.20 40 0
282426 형들 좋은 아침이야 [2] 534F444D61737465갤로그로 이동합니다. 11.10.20 40 0
282424 횽들 컴퓨터 앞에 앉아있으면 정자가 죽는다는게 사실인가요? [5] 다림줄갤로그로 이동합니다. 11.10.20 118 0
282423 한국서 아이폰 못팔게… 삼성, 판매금지 추진 [4] 거칠게갤로그로 이동합니다. 11.10.20 91 0
282422 게임관련학과는 [1] 즐쿰갤로그로 이동합니다. 11.10.20 67 0
282421 으헝.ㅅ. [2] 풀개미&#039;ㅅ&#.갤로그로 이동합니다. 11.10.20 50 0
282420 시사매거진 2580에 해킹, 나꼼수 관련해서 나온다~~ [1] 거칠게갤로그로 이동합니다. 11.10.20 114 0
282417 어플에서 웹서버를 거쳐서 DB를 쓰라는데 [7] 초보(175.205) 11.10.20 81 0
282416 이번에 짝에 나왔던 남자4호가 알고보니 프로그래머였었다. [5] 거칠게갤로그로 이동합니다. 11.10.20 341 0
282415 미안횽들 내가 프갤을 더럽히는거 같아. [7] 다림줄갤로그로 이동합니다. 11.10.20 57 0
282414 정규식 질문. [9] 고추장불고기갤로그로 이동합니다. 11.10.20 71 0
282411 울 강사님 막 해매 [3] 다림줄갤로그로 이동합니다. 11.10.20 76 0
282409 형들 유닉스 질문 하나 있어요 Catalina갤로그로 이동합니다. 11.10.20 36 0
282408 프겔 횽들도 짝 이라는 프로 나가봐~ [6] 거칠게갤로그로 이동합니다. 11.10.20 67 0
282407 요즘 대세 AV배우 누구임? [9] 다림줄갤로그로 이동합니다. 11.10.20 148 0
282406 안드로이드 sqlite로 db만들었는데 [4] 초보(175.205) 11.10.20 76 0
282405 프갤질 할려고 뒤에 앉았는데 앞에 프로젝트 스크린이 안보인다 다림줄갤로그로 이동합니다. 11.10.20 49 0
282404 예아 입갤~ 안ㄴ 다림줄갤로그로 이동합니다. 11.10.20 20 0
282403 9시05분 Kanon갤로그로 이동합니다. 11.10.20 27 0
282400 삽질하는 새끼들을 위해서 말해드림. 116.44(110.11) 11.10.20 55 0
282399 어제 받은 하이킥 보는데 박하선 진짜 맘에 든다 하악하악 [4] 거칠게갤로그로 이동합니다. 11.10.20 101 0
282397 조공글들 출근길에 [1] 전간디갤로그로 이동합니다. 11.10.20 103 0
282395 삼성면접가기전에 [1] 전간디갤로그로 이동합니다. 11.10.20 111 0
뉴스 지드래곤 GD 방콕 월드투어 공연 일방적 취소로 팬들 반발..“휴가 계획과 경비를 전부 날렸다” 디시트렌드 07.11
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2