質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.59%

pythonのpygameで音が鳴らない

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 2,651
退会済みユーザー

退会済みユーザー

pygameを使って音楽を再生したいのですが、なぜか音がなりません。
エラーなどは発生していませんし、コンピュータ自体の音量も0ではありません。
スピーカーが起動するような音はしているのですが、肝心の音楽
がなりません。(ピアノの単音です。)
よろしくお願い致します。
 
ファイルの構造(実行するファイルと音楽のファイルは同じディレクトリファイルにあります。

  • Desktop/python/OnkanApp/
    ---OnkanApp.py
    ----Music_DO.mp3
    ----Music_RE.mp3
    ----Music_MI.mp3
#!/usr/bin/env/python3
# -*- coding: utf-8 -*-

import time
import random
import sys

import pygame.mixer



class OnkanApp:   #メインとなるクラス
    """絶対音感を判定するアプリです"""
    def __init__(self,name,point):
         self.name=name
         self.point=point
         self.music_file={0:'OnkanApp_DO',1:'OnkanApp_RE',2:'OnkanApp_MI',3:'OnkanApp_FA',4:'OnkanApp_SO',5:'OnkanApp_RA',6:'OnkanApp_SI'}
         self.Ok=0
    def select_game(self):
        self.game_mode=int(input("""ゲームモード選択
                                    チュートリアル :                         0
                                    単音でフラットとかシャープとかないやつ :    1
                                    単音だけどフラットとかシャープとかあるやつ:  2
                                    和音でフラットとかシャープとかないやつ:     3
                                    和音でしかもフラットとかシャープとかあるやつ:4"""))
        if self.game_mode<0 or self.game_mode>4:
            print('定義外の数字です')
            return False

        return self.game_mode
    def game1(self):

        time.sleep(3)
        self.Q=1
        while self.Q<6:
            print('問題'+str(self.Q))
            print('これから流れる音の音階を、次の ド〜シの中から選びなさい')
            pygame.mixer.init()
            self.k = random.randint(0, 6)
            pygame.mixer.music.load(self.music_file[self.k]+'.mp3')
            pygame.mixer.music.play(10)
            pygame.mixer.music.stop()
            self.anser=int(input(""" \t\t\t\t\t\t\t\t\t  ド :  1
                                      レ :  2     
                                      ミ :  3
                                      ファ:  1
                                      ソ :  1
                                      ラ :  1
                                      シ :  1
                                      """))
            if self.k==self.anser:
                print('正解!')
                self.Ok=self.Ok+1
            else:
                print('不正解')
            self.Q=self.Q+1
        return self.Ok
    def game2(self):
        pass
    def game3(self):
        pass
    def game4(self):
        pass


name_num = int(input('こんにちは!君は誰ですか?...Aくんなら1,Bくんなら2,Cくん なら3を入力してください。'))  # 誰がやってるのか判定
if name_num == 1:
        name = 'A'
elif name_num == 2:
            name = 'B'
elif name_num == 3:
            name = 'C'
elif name_num < 1 or name_num > 3:
            print('定義外') #定義外を判定
            sys.exit()
Mu=OnkanApp(name_num,0) #インスタンスの作成
g=Mu.select_game()
if g==False:                              #関数 select_game がFalseを返したか判定
    print('定義外です。')
    Mu.select_game()
else:
    print('難易度は', g, 'ね。です。')
if g==1:
    Mu.game1()
    Ok=Mu.game1()
    print('5問中'+str(Ok)+'正解でした。')
    Mu.select_game()
elif g==2:
    Mu.game2()
elif g==3:
    Mu.game3()
elif g==4:
    Mu.game4()
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+2

music.playの機能を多分勘違いしておられるような印象です。この関数は「音が鳴り終わるまで戻ってこない」のではなく「音の再生開始をハードウェアに指示した後即座に戻ってくる」のです。
よって人間が再生音を充分聞き終わるまでプログラムの実行を一時的に止める配慮が必要です。
time.sleepを使うとそれが簡単にできますので、10回ループ再生するのに10秒必要なら
time.sleep(10)をplayの後に書いておけばよいでしょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/02/09 17:25

    ありがとうございます!
    time.sleep(....)を追加して解決いたしました!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.59%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る