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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Q&A

解決済

1回答

1336閲覧

Go言語でコードを実行して直接音を鳴らす方法

aaaa____

総合スコア26

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

0グッド

0クリップ

投稿2022/08/24 11:59

現状

題名通りになります.まずGo言語で音を鳴らすにはどうすれば良いのかを知るために,いくつかサイトを検索してみたのですが,
https://techblog.istyle.co.jp/archives/2102

このサイトでは,キーボードを鍵盤に見立てていて望む形とは違う.

https://news.mynavi.jp/techplus/article/gogogo-18/

このサイトでは,.wavファイルのsin波を生成していて望んだ形に近いのですが,.wavファイルの再生自体は別のプレイヤーか何かで行っていて,違う,のようになりました.

LiveCoding用の言語として活用することを考えているため,実行ごとに.wavファイルを作成されるのはあまりよろしくないのですが,とりあえず音を鳴らしてみることが先決と考え,では,二つ目のリンクで再生した.wavファイルを再生できるコードの書き方はどこかに書いていないかを調べたのですが,次のリンクのようなものを見つけました.

https://qiita.com/usk81/items/8590172a23bb71e21329

ここではmp3でやっていますが,

https://github.com/faiface/beep

を見てみると,wavというのもあるので,少し弄ればwavもできるのではないかと思いこれに触れています.とりあえずmp3で動くことを確かめるために次のサイトの一番上の音源を取り,"sea.mp3"として再生してみようとしています.

https://vsq.co.jp/plus/sound/category_sub/sea/

質問内容

go

1package main 2 3import ( 4 "log" 5 "os" 6 "time" 7 8 "github.com/faiface/beep" 9 "github.com/faiface/beep/mp3" 10 "github.com/faiface/beep/speaker" 11) 12 13func main() { 14 f, err := os.Open("sea.mp3") 15 if err != nil { 16 log.Fatal(err) 17 } 18 st, format, err := mp3.Decode(f) 19 if err != nil { 20 log.Fatal(err) 21 } 22 defer st.Close() 23 24 speaker.Init(format.SampleRate, format.SampleRate.N(time.Second/10)) 25 26 done := make(chan bool) 27 speaker.Play(beep.Seq(st, beep.Callback(func() { 28 done <- true 29 }))) 30 <-done 31}

コードを上のようにし,go run main.goで実行してみたところ,次のような結果が返ってきました.これは一体どのように対処すれば良いのでしょうか.

% go run main.go # github.com/hajimehoshi/oto In file included from driver_macos.m:17: In file included from /Library/Developer/CommandLineTools/SDKs/MacOSX12.1.sdk/System/Library/Frameworks/AppKit.framework/Headers/AppKit.h:10: In file included from /Library/Developer/CommandLineTools/SDKs/MacOSX12.1.sdk/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h:12: /Library/Developer/CommandLineTools/SDKs/MacOSX12.1.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSBundle.h:91:143: error: function does not return NSString /Library/Developer/CommandLineTools/SDKs/MacOSX12.1.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSObjCRuntime.h:103:48: note: expanded from macro 'NS_FORMAT_ARGUMENT'

やってみたこと

errorとなっている文を検索して上3つに表示される
https://github.com/icerockdev/moko-resources/issues/247
のようなサイトを見たのですが対処法が掴めず,他に見ようとしてもswiftのような別の言語についてであるようなサイトが見つかりました.

% go get github.com/faiface/beep/speaker % go get github.com/faiface/beep/mp3 % go get github.com/faiface/beep

は実行してあります.

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

当方macOS12.5.1, Go1.19で以下の手順で何も問題なく動作しました。
もしかするとClang周りの環境も問題かもしれません、Apple提供のCommandLineToolsの最新版などに更新してみてはどうでしょうか?

go mod init sample

にてgo.modファイルが作成される。
同じフォルダにmain.goを作成、質問通りのコードを張り付けて保存。

% go mod tidy go: finding module for package github.com/faiface/beep/mp3 go: finding module for package github.com/faiface/beep go: finding module for package github.com/faiface/beep/speaker go: downloading github.com/faiface/beep v1.1.0 go: found github.com/faiface/beep in github.com/faiface/beep v1.1.0 go: found github.com/faiface/beep/mp3 in github.com/faiface/beep v1.1.0 go: found github.com/faiface/beep/speaker in github.com/faiface/beep v1.1.0 go: downloading github.com/hajimehoshi/oto v0.7.1 go: downloading github.com/hajimehoshi/go-mp3 v0.3.0 go: downloading golang.org/x/sys v0.0.0-20190626150813-e07cf5db2756 go: downloading golang.org/x/mobile v0.0.0-20190415191353-3e0bab5405d6 go: downloading golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8 go: downloading golang.org/x/image v0.0.0-20190227222117-0694c2d4d067

サイトからダウンロードした音源サンプルファイルを「sea.mp3」に改名して同じフォルダに置く。

go run .

以上の操作でちゃんと音が鳴り、鳴り終わった後、正常に終了しました。

投稿2022/08/30 00:35

編集2022/08/30 00:44
nobonobo

総合スコア3367

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aaaa____

2022/08/30 11:37

ご回答ありがとうございます. ご指摘いただいた通り,一度Command Line Toolを更新したのち, `go mod tidy` を実行して `go run .` をしてみたところ,きちんと音がなりました. `go run main.go` でも正しく音がなりました. CLTの更新前にgo mod tidyをしていなかったかもしれないので,CLTのバージョンとどちらが原因かわからなくなってしまいましたが,問題は解決いたしました.ありがとうございます.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問