PAlib는 2가지 다른 소리 출력 방법을 제공한다.
wav 를 재생하는 것 같은, raw 포맷은 특수 효과(레이저 소리 등)에 좋다. 하지만 음악을 위해 너무 많은 공간이 필요하다.
mod player 는 음악을 재생하는데 효과적이다. 각각의 음악이 롬에서 매우 적은 공간을 차지하기 때문이다.

-. Raw 사운드 파일
DS는 wav 파일을(또는 mp3, ogg같은 다른 포맷) 재생할수 없다. 그래서 raw 포맷으로 파일을 변환하고 재생해야 한다.
Wav 를 Raw로 변환하기
변환툴로는 Switch, Audacity, Sox(커맨드라인 사용) 이 있지만 여기서는 Switch를 사용할 것이다.
Switch를 위에 링크에서 다운받아 설치하여 열어 보자.

Add File 이나 Add Folder 버튼을 클릭하여 변환할 리스트 파일을 더한다. 변환할 모든 파일을 추가한 후 Output Format(바닥 왼쪽)을 .raw 포맷으로 변경한다. 그리고 Encoder Settings 를 다음과 같이 한다.

선호한다면 스테레오 출력으로 놔둘수 있다. 또한 샘플링을 11025 과 다른 걸로 설정 할 수 있다. 하지만 변환한 파일이 잘 작동하기 위해서는 포맷은 8 bit signed 로 설정해야 한다. 이 옵션은 적당한 음질로 작은 파일을 생성할 수 있다.
Output Folder를 설정한다. 이제 준비가 되었으면 Convert 버튼을 클릭한다. .raw 파일이 몇초만에 생성 될것이다.

Raw 파일 재생
raw 파일이 생성되었으면 프로젝트의 data 디렉토리에 놓는다. Sound/Sound 예제이다.
#include <PA9.h>       // Include for PA_Lib
#include "saberoff.h"  // Include the sound (found in the data folder in .raw format - for saberoff.raw use saberoff.h)
 
// Function: main()
int main(int argc, char ** argv)
{
PA_Init();    // Initializes PA_Lib
PA_InitVBL(); // Initializes a standard VBL
PA_InitText(0, 0);

PA_InitSound()// Init the sound system

PA_OutputSimpleText(0, 6, 10, "Press A to play the sound");
 
// Infinite loop to keep the program running
while (1)
{ // Play the sound if A is pressed...
if (Pad.Newpress.A) PA_PlaySimpleSound(0, saberoff);//here, too. Only saberoff
 
PA_WaitForVBL();
}
 
return 1;
}

1. #include "saberoff_raw.h" 는 raw 파일을 포함한다. 단지 PAlib를 포함한 후 nameoftherawfile.h 형식으로 놓으면 된다.
2. PA_InitSound(); 는 PAlib의 사운드 시스템을 (raw, mod 파일 양쪽다) 초기화한다. 기본 raw 파일을 11025 샘플율과 8 bit signed 포맷으로 설정한다.
3. PA_PlaySimpleSound(channel, soundfile); 이것은 channel (0-7) 과 사운드 파일을 고르면 끝이다. 동시에 8개 채널까지  재생이 가능하다.(기본적으로 8개 나머지 유용한 채널은 mod player에 예약되어 있다. 하지만 이것도 나중에 변경 할수 있다.)

-. Mod 파일
Mod 파일은 사용하기 좋다. 쉽고 매우 작은 공간을 롬에서 차지한다. 소리도 꽤 좋은 편이다. 하지만 생성하기가 그리 쉽지는 않다. The Mod Archive, Exotica , ModLand 의 자료를 사용해보기 바란다.
Sound/ModPlayer 예제이다. 먼저 mod 파일을 data 디렉토리에 놓는다. 파일이 없으면 생성하라.

// Includes
#include <PA9.h>       // Include for PA_Lib
#include "modfile.h"  // Include the mod file (the .mod file is in the data directory)
 
 
// Function: main()
int main(int argc, char ** argv){
 
PA_Init();    // PA Init...
PA_InitVBL(); // VBL Init...

PA_InitSound(); // Sound Init, for the mod player...

PA_PlayMod(modfile_mod)// Play a given mod

while(1){ // Infinite loop
PA_WaitForVBL();
}

return 0;
} // End of main()
1. #include "modfile.h" 은 파일의 상위에 놓는데 PAlib를 포함하고 난 바로 다음이다. 이 파일은 modfile name + .h 이다. 만일 추가하지 않으면 프로그램은 modfile 이 어디 있는지 알지 못한다.
2. PA_InitSound(); 는 소리를 초기화 한다. 사용하지 않으면 modplayer는 작동하지 않는다.
3. PA_PlayMod(modfile); 주어진 modfile를 재생한다.
마지막으로 제한은 mod 파일은 1-16 채널을 가질수 있는데.. 8 채널만 사용하기 권장한다. 나머지 8 채널은 음향 효과를 위해 남겨둔다.
Posted by 버들피리불며

댓글을 달아주세요:: 네티켓은 기본, 스팸은 사절

  1. chosun77
    2007.08.09 22:14
    댓글 주소 수정/삭제 댓글
    호기심에 .. 이것저것 해보다가.. 여기 sound 과정까정.. 따라와 부렸네요 ㅎㅎ... 재밋는 여가?를 보낼수 있어서.. 감사합니다~.


    -ㅁ-;; mod 변환기는.. PTMID 밖에 못구했네요~.. midi밖에 안되는 쩝..(mod파일이 생소해서~ ㅎㅎ)

    (문득.. 이거 debugging은 화면에 찍어보는거 뿐 달리 방법이 없나요? ㄷㄷㄷ)
    • 2007.08.10 09:52
      댓글 주소 수정/삭제
      얼마 안있으면 홈브류 하나 나오겠네요. ^^
      저도 mod는 생소한데 파일크기도 작고 배경음악으로 괜찮은것 같습니다.
      하지만 PC에서 듣는것과 다르게 NDS에서는 음질이 좀 떨어지긴 하더군요.
      debugging 시 저도 다른 방법을 못찾아서 인지는 몰라도 PA_OutputText 함수로 찍어 보면서 하고 있습니다. emulator상에서 실행해봐야 해서 모니터링하기가 힘든듯 합니다. 3D는 잘 지원도 안돼어서 작동확인하기도 힘들죠.
      제 경우에는 모듈별로 조금씩 테스트해가면서 하니깐 코딩 진도가 잘 안나가서 그렇지 debug 하기는 쉬운것 같더군요.
      전체를 한꺼번에 머리로만 생각해서 코딩다하고 디버깅을 해봤는데.. 디버깅시간이 너무 많이 걸리더군요. ^^;;
  2. 황규섭
    2008.04.12 04:07
    댓글 주소 수정/삭제 댓글
    3.29M 짜리 RAW 파일을 넣으니깐 DSTT 닥터에서 중간까지 로딩하다 멈쳐버리네요 ㅠ 애뮬상에서는 잘 실행되고 재생됬는데 로딩중 멈추는 현상 왜 그런거죠??? MP3음악을 위에 Switch프로그램으로 위에 강좌처럼 RAW파일로 인코딩 한건데 모가 문제인가요 ㅠ?
    • 2008.04.14 20:12
      댓글 주소 수정/삭제
      파일이 너무 큰 것 같습니다. NDSL 게임기내에 내장 Ram이 생각보다 무지 작습니다.
  3. 황규섭
    2008.04.16 03:08
    댓글 주소 수정/삭제 댓글
    그럼 배경 음악 크기가 큰경우 어떻게 실행해야 하죠???

    MOD 파일은 파일로 만드는게 쉽지 않을꺼 같고

    mp3로 재생 쪽은 예저가 없더라고요 ㅠ

    혹시 다른 방법이 있을까요?
    • 2008.04.17 21:23
      댓글 주소 수정/삭제
      음질을 낮춰서 용량을 줄이는지 아니면 하드웨어를 직접 제어해서 처리가 가능한지는 잘 모르겠지만 PAlib 상에서는 특별히 처리하는 방법은 안보이네요.
  4. 전춘태
    2008.04.29 02:04
    댓글 주소 수정/삭제 댓글
    R4를 쓰고있습니다.
    TF카드에 저장한 음악을 Load하여 재생하는 방법은 없습니까?
    TF카드에 저장한 TXT를 Load하여 화면에 display 하는 방법은 알고있습니다.
    • 2008.05.05 22:29
      댓글 주소 수정/삭제
      TF카드는 micro sd카드를 말씀하는 건가요?
      음악이나 동영상은 변환해서 NDSL에서 실행가능한 포맷으로 변환해서 사용하면 됩니다.
      txt는 메뉴에서 다른 메뉴로 들어가면 txt를 선택할수 있는 화면이 나오고요..
      자세한건 커뮤니티 사이트를 가면 더 자세히 알수 있습니다. 제 사이트 성격하고는 좀 틀린 질문이네요. 여긴 개발 관련 사이트라..
  5. 전춘태
    2008.04.29 02:10
    댓글 주소 수정/삭제 댓글
    문쉘(moonshell)은 TF카드에서 mp3등 음악을 Load하여 재생할수있습니다.
    문쉘(moonshell)의 소스를 다운할수있다면 참조하여 만들수 있을것입니다.
    • 2008.05.05 22:31
      댓글 주소 수정/삭제
      이 사이트는 특정 닥터를 따로 지원하지는 않습니다.
  6. 전춘태
    2008.04.30 12:13
    댓글 주소 수정/삭제 댓글
    소이제어대하여 다른예제는 없습니까?
    • 2008.05.05 22:36
      댓글 주소 수정/삭제
      소이제어대하여가 소리제어에대하여 란 말씀인가요?
      Palib 폴더밑의 examples 폴더에 보면 여러 가지 예제가 있긴 하지만 소리제어에 관련해서는 그리 많지 않습니다.
      Palib의 단점이 소리제어가 단순하다는 거거든요.
      소리제어는 arm7 cpu를 사용하는데.. 그 쪽 코드는 거의 없다시피 합니다.


BLOG main image
닌텐도 DS 관련해서 Palib를 소개하고 제가 개발한 홈브류와 다른 개발자의 홈브류를 소개하고자 합니다. NDS 자체 제작(Homebrew)에 관심있는 다른 분들의 길잡이가 되고 싶습니다. by 버들피리불며

공지사항

카테고리

분류 전체보기 (39)
따라하기 (5)
PA_lib 소개 (10)
Homebrew 소개 (7)
나의 Homebrew (15)
기부하기(Donate) (1)
Wii (1)
Total : 117,269
Today : 0 Yesterday : 1