2017-10-01 13 views
1

기본적으로 코로나 SDK (내 첫 번째 프로젝트)와 Im 신제품에서 피아노 앱을 만들고 있습니다. 코로나 포럼에서 내 문제에 대해 몇 가지 질문을했지만 정확한 답변을 얻지 못했기 때문에 귀하의 도움을 요청합니다. 내가 새로 말했듯이, 필요한 코드를 뽑아 내기가 어려울 수도 있지만, 경험이 풍부한 코로나 사용자가 쉽게이 작업을 수행 할 수 있음을 알고 있습니다.코로나 SDK 피아노 앱 - 사운드 스왑 등

각 키에 대해이 코드를 사용합니다. (media.playEventSound는 매우 약한 옵션이므로 audio.loadSound 등의 Coronalabs에서 오디오를 재생하는 것에 대한 라이브러리를 보았습니다. 가능하다면, 물론, 내가 ... "미디어"로 유지하고 싶습니다 - 나는 그들이 누를 때 단지 그 소리를 전환이 개 페달을 가지고 피아노를 원하는)

local widget = require("widget") 
local C  = media.newEventSound("C.mp3") 

local button_C_Press = function(event) 
    media.playEventSound(C, button_C_Press) 
end 

local button_C = widget.newButton 
{ 
    defaultFile = "NewKey.png", 
    overFile = "NewKey2.png", 
    onPress  = button_C_Press, 
} 
button_C.x = 20; button_C.y = 295 

기반 기능 (나는에있는 내 프로젝트 폴더에는 총 3 가지 사운드 아가야먼트 (기본 및 2 개의 페달 오디오 파일)와 키에 노트 문자가 필요한 버튼이 있습니다. 여기 내 문제가 있습니다.이 모든 것을 하나의 코드로 가져 오는 방법은 무엇입니까? 나는 아래에이 샘플과 같이 하나의 키에 대한 코드를 적어 주겠다.하지만 방금 언급 한 기능을 포함하여? 나는 정말 그걸 해결하고 싶습니다 .. Btw. 나는 soundTable/fileTable 메서드를 호출하지만, 나는 개별적으로 각 키를 수행 할 수있는 충분한 시간을 가지고 있다고 생각한다. 아마도 테이블 메서드를 사용하는 것일 수도있다.

영어로 감사드립니다.

+0

playEventSound의 두 번째 인수가 잘못되었다. playEventSound에 필요한 유일한 인수는 이미 제공 한 soundId입니다. [PlayEventSound API 문서] (https://docs.coronalabs.com/api/library/media/playEventSound).html) –

+0

'소리 전환'은 무엇을 의미합니까? 그것에 대해 더 자세히 설명해 주시겠습니까? 열쇠로 생성 된 소리가 두 소리를 교대로 반복한다는 것을 의미합니까? –

+0

'스위치 소리'는 페달을 밟으면 모든 키가 다른 오디오를 작동하기 시작한다는 것을 의미합니다. 밖에 88 키가 있습니다. 88x3 = 264이므로 총 264 개의 오디오 파일이 필요합니다. 예 : C1.mp3- 기본 유형, C1sustained.mp3-first 페달 유형 및 C1sustained2.mp3-second 페달 유형. 첫 번째 페달을 누르면 C 기반 사운드를 재생하는 키가 C1.mp3에서 C1sustained.mp3으로 즉시 바뀝니다. 다른 모든 키들과 동일한 작업. 노트 버튼을 누르면 그래픽 파일이 노트 비문으로 바뀝니다. – rd119

답변

0

더 많은 코드를 요청했습니다.

local isPedalActive = false 

그리고 그들은 페달 버튼을 터치 한 경우, 다음 true로 설정 :

isPedalActive = true 

를 그리고이 추가 나는이 코로나 포럼

부울 변수를에 추천있어 button_C_press 함수 :

if event.phase == "began" then 
    if isPedalActive = true then 
    media.playEventSound(cPedal) --assuming you already loaded your audio above 
    end 
end 

물론 피아노 키 수가 많으면 b 각 함수에 대해 개별적으로 수행하지 마십시오.

  1. widget.newButton 테이블에서 각 키의 특정 ID를 설정하십시오.

  2. if 문에서 사운드를로드하고 대신 버튼의 id를 검색하여 해당 mp3 파일을 재생합니다.

(즉, 하나 개의 페달을 지원)

--create table of key button ids and mp3 files for their pedal noises 
local keys = { 
    {buttonId = "C", pedalNoise = "Cpedal.mp3"}, 
    {buttonId = "D", pedalNoise = "Dpedal.mp3"} 
} 

function pianoKeys(event) 
    for i = 1, #keys do -- for each table in the keys table, load the sound for each key 
    local keySound = media.newEventSound(keys[i].buttonId .. ".mp3") -- normal sound loaded 
    local keypedalSound = media.newEventSound(keys[i].pedalNoise) --pedal sound loaded 
    function buttonPress(event) --When they press the key, detect if the pedal is active 
     if event.phase == "began" then 
     if isPedalActive == true then 
      media.playEventSound(keyPedalSound) --is active, play pedal sound 
     else 
      media.playEventSound(keySound) -- is not active, play regular sound 
     end 
     end 
    end 
    local pianoKey = widget.newButton({ 
     id = keys[i].buttonId, -- place appropriate id 
     defaultFile = "new" .. keys[i].buttonId .. "key.png", -- place appropriate defaultFile 
     overFile = "new" .. keys[i].buttonId .. "key2.png", -- place appropriate overFile 
     onPress = buttonPress -- apply above function to each key 
    }) 
    end 
end 

내 문제는 - 나는 사운드 테이블을 만들고 싶어하지 말자. 각 키를 개별적으로 수행하는 것이 좋습니다. 아래에 게시 한 키 코드 중 하나의 샘플처럼. 그러나 어떻게? 모든 것을 하나의 유효한 것으로 만드는 방법을 모른다./(2 페달 + 노트 버튼)