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

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

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

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1305閲覧

let atai = max(0, (dB + 77)) / 77

kei1990s

総合スコア25

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2016/12/06 09:35

編集2016/12/06 09:52

var

1 2 3 func levelTimerCallback() { 4 audioRecorder.updateMeters() 5 let dB = audioRecorder.averagePower(forChannel: 0) 6 let atai = max(0, (dB + 77)) / 77 7 nami1.progress = atai 8 nami2.progress = atai 9 nami3.progress = atai 10 }

ここの
let dB = audioRecorder.averagePower(forChannel: 0)
let atai = max(0, (dB + 77)) / 77

max(0, (dB + 77)) / 77
比較可能な2つの値のうち大きい方を返します。とあるのですが
dbにどのような値がどのように定義されて入るのかわかりません

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

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

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

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

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

fromageblanc

2016/12/06 09:37

コードのマークダウンは'''(シングルクォート)でなく、```(バッククォート(shift+@)です)よ..
fuzzball

2016/12/06 09:42

77という値はどこから出てきたのでしょうか?それも含めての質問でしょうか?
kei1990s

2016/12/06 09:45 編集

そうですね 具体的に何をやってるかというと録音をする際に自分の声に反応すればprogress barも反応するということをやろうとしているのですが、なぜ77にしたのかという理由も見つけれず質問という形をとらせていただきました
guest

回答1

0

ベストアンサー

最初、質問にも書いていたように、dBは0(最大)〜-160(最小)です。77は閾値ですね。
最大(dB=0)のときに1.0、閾値以下(dB<=-77)のときに0.0となるような計算式です。
例えば、0〜-160のループを作って計算結果を表示させてみれば値の変化が分かると思います。

【追記】作ってみました

そのままだとIntで計算しちゃうので、Doubleでキャストしてます。

swift

1for dB in -160...0 { 2 let atai = Double(max(0, (dB + 77))) / 77.0 3 print("dB=\(dB) atai=\(atai)") 4}
dB=-160 atai=0.0 dB=-159 atai=0.0 dB=-158 atai=0.0 : dB=-78 atai=0.0 dB=-77 atai=0.0 dB=-76 atai=0.012987012987013 dB=-75 atai=0.025974025974026 : dB=-2 atai=0.974025974025974 dB=-1 atai=0.987012987012987 dB=0 atai=1.0

投稿2016/12/06 11:01

編集2016/12/06 13:08
fuzzball

総合スコア16731

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

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

kei1990s

2016/12/06 16:18

なるほどなすごいわかりやすい。 一つきになるんですが 77を閾値にした意味は何なんでしょうか? 78でも79でも90でもいいわけで 何を基準に設定するのでしょうか?
fuzzball

2016/12/06 22:20 編集

実際に試してみて丁度良かったんじゃないでしょうか? 自分だけが使うなら決め打ちでもいいですが、アプリとして公開するなら閾値を変更出来るようにすべきでしょうね。
kei1990s

2016/12/06 23:55

例えば音量をより多く取得できるのは 77と-160なら後者の方がより多くの音を拾ってくれるという認識は適切でしょうか?
fuzzball

2016/12/07 00:19

表示するコードを書いているのですから、実際に値を変更して確かめてみてはどうでしょうか?
kei1990s

2016/12/07 00:29

了解しました!
kei1990s

2016/12/07 00:40

実際に試してみて丁度良かったんじゃないでしょうか? 自分だけが使うなら決め打ちでもいいですが、アプリとして公開するなら閾値を変更出来るようにすべきでしょうね。 実際にいろんな値を設定してみるとベストなのは77でした。 そこで、アプリとして公開するなら閾値を変更出来るようにすべきでしょうね。というのはどういう意味でしょうか? 個人的には77を固定しても問題ないのでは?と考えてしまいます
fuzzball

2016/12/07 00:51

引用するときは引用だと分かるようにしてもらえますか?非常に見づらいです。 で、具体的にどういうアプリか分からないので何とも言えませんが、ボイスレコーダーのようなものだとして、 ・騒がしい場所で使うときは閾値を上げる。 ・大きな声を出せない場所では閾値を下げる。 など、使用する環境によって変えたい場合。 また、個人で使うなら「あなたがベスト」な閾値で良いと思いますが、声の大きさも人それぞれですし、人によってベストな値は変わる(可能性がある)ということです。 もちろん、絶対に必要というわけではなく、使い勝手の問題です。
kei1990s

2016/12/07 03:54

なるほど わかりやすくありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問