2017-10-01 4 views
1

Donc, fondamentalement, je fais l'application de piano dans Corona SDK (mon premier projet) et je suis nouveau à elle. J'ai posé quelques questions sur mon problème sur les forums Corona mais je n'ai pas obtenu de réponses exactes qui pourraient m'aider, alors je demande votre aide. Comme je l'ai dit im nouveau, donc il peut être difficile pour moi de trouver le code nécessaire, mais je sais que vous, les utilisateurs expérimentés de Corona, pouvez facilement faire cela.Corona SDK application de piano - échange de sons, etc

J'utilise ce code pour chaque clé: (Je sais que media.playEventSound est une option assez faible pour faire cela, j'ai vu quelques librairies pour jouer de l'audio sur Coronalabs comme audio.loadSound etc. mais si c'est possible, bien sûr, je voudrais rester avec « médias ... » - fonctions à base)

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 

Je veux le piano avoir 2 pédales que l'interrupteur juste le son quand ils sont pressés (je dans mon dossier de projet au total 3 différents arrangements sonores - par défaut et 2 fichiers audio soutenus de pédale) et le bouton qui exige des lettres de note sur des clés. Et voici mon problème - comment obtenir tout cela dans un code? Je veux dire, pouvez-vous m'écrire là-bas un code pour une clé comme cet exemple que j'ai posté ci-dessous mais en incluant les fonctionnalités que je viens de mentionner s'il vous plaît? J'aimerais vraiment avoir résolu cela .. Btw. Je connais la méthode soundTable/fileTable, mais elle est appelée, mais je pense avoir assez de temps pour faire chaque touche individuellement - ou utiliser la méthode table peut-être - je souhaite seulement que ce soit facile, car c'est mon premier projet.

Désolé pour mon anglais et merci!

+0

Le deuxième argument du playEventSound semble faux. Le seul argument requis pour playEventSound est soundId que vous avez déjà fourni. [Documentation de l'API PlayEventSound] (https://docs.coronalabs.com/api/library/media/playEventSound.html) –

+0

Que signifie 'changer son son'? Pouvez-vous en dire plus à ce sujet? Voulez-vous dire que le son produit par la touche alterne entre deux sons? –

+0

'changer de son' signifie que si vous appuyez sur la pédale, toutes les touches commencent à fonctionner avec un son différent. Il y a 88 clés. 88x3 = 264 donc 264 fichiers audio au total sont nécessaires. Par exemple: type C1.mp3-default, type de pédale C1sustained.mp3-first et type C1sustained2.mp3-second. Lorsque vous appuyez sur la première pédale, la touche qui joue les sons basés sur C passe immédiatement de C1.mp3 à C1sustained.mp3. Même travail avec toutes les autres touches. Et lorsque vous appuyez sur le bouton de note, le fichier graphique clé devient un avec l'inscription de note. – rd119

Répondre

0

Vous avez demandé plus de code; J'ai ce recommandé sur les forums Corona

variable booléenne:

local isPedalActive = false 

Et quand ils ont touché le bouton de la pédale, puis mettre à true:

isPedalActive = true 

Et puis l'ajouter à bouton_C_press fonction:

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

Bien sûr, si vous avez un grand nombre de touches de piano, c'est b etter à ne pas le faire individuellement pour chaque fonction, plutôt:

  1. Définir une identification spécifique pour chaque clé, dans le tableau widget.newButton.

  2. Dans l'instruction if, chargez le son ici mais à la place vous récupérerez l'identifiant du bouton et jouerez ce fichier mp3.

(qui prend en charge une seule pédale)

--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 

Mon problème - je veux faire Dont't son tableau. Je préfère faire chaque clé individuellement. Comme cet exemple de code d'une clé que j'ai posté ci-dessous. Mais comment? Je ne sais pas comment tout obtenir en une seule chose valide:/(2 pédales + bouton de note)