プログラミング: 2020年10月アーカイブ

例えば、子供向けに、一問一問別ファイルになったなぞなぞ音声ファイルのうちから 3問だけランダムに抜き出して、ひとつの音声ファイルにしてダウンロードさせるとか、まあ、そういう感じのデモ要件があるので、プログラムを作ってみた。

まあ、ffmpeg 使えば一発なんだけどね。

プログラム的には、結合する 3つのファイルをランダムにもとめて、そのファイル名を i オプションと一緒に連結していくだけ。(ひとつのファイルごとに i オプションは必要なので注意)

下のように編集したオプションで ffmpeg を実行するだけだ。
(出力ファイル名を毎回同じにするなら、上書き許可の y オプションもお忘れなく。プログラム内から呼ぶのであれば、ffmpeg は大量のログを標準出力に出すので、loglevel オプションでの抑制もお忘れなく)

/usr/bin/ffmpeg -y  -i /data/11.mp3 -i /deta/7.mp3 -i /data/5.mp3  -loglevel quiet -filter_complex "concat=n=3:v=0:a=1" /data/nazonazo.mp3

赤いところがプログラムの編集が必要なところ。
n=3 は入力ファイルの数で、最後の /data/nazonazo.mp3 が出力ファイル名だ。

連結対象のファイルの個数が変わらないのなら n=3 のところは変更不要だし、毎回同じファイルに書くのなら /data/nazonazo.mp3 も編集不要。

結合したファイルを聞いてみたが、つなぎ目に変なノイズが入ることもなく、なかなかいい感じであった。
まあ、DateTime 型のオブジェクトには AddMonths メソッドがあるので、

Dim hoge_today As DateTime = "2020/03/23"
Dim hoge_addmon As DateTime = hoge_today.AddMonths(1)

とすれば、hoge_addmon には 2020/04/23 がセットされる。

一応、自動で月の最終日の判断はするので、

Dim hoge_today As DateTime = "2020/03/31"
Dim hoge_addmon As DateTime = hoge_today.AddMonths(1)

であれば、hoge_addmon には 2020/04/30 がセットされる。
決して、2020/05/01 であったり、ましてや 2020/04/31 になってしまうわけではない。

なんか、ネット上の情報を見ていると、「.NET って、ちゃんと最終日の判断してるやん!!」「3/31の一ヶ月後が 4/30 になってて感動!」みたいな記事が多い。
いや、それは当たり前なんちゃう?(^^; そんな感動することか!?と思うのだが、VB.NET なんかは、何もプログラミングのことを知らずに入社したプログラマが最初に使う言語ということも多いだろうから、こういう感動をする人も多いのかなあ・・・とか思ったり。

ただこの「自動で最終日をセットしてくれて素敵」は、基準となる年月日が「31日まである月」のみの話である。

Dim hoge_today As DateTime = "2020/02/29"
Dim hoge_addmon As DateTime = hoge_today.AddMonths(1)

の場合、hoge_addmon には 2020/03/29 がセットされる。最終日でもなんでもない。

Dim hoge_today As DateTime = "2020/02/29"
Dim hoge_addmon As DateTime = hoge_today.AddMonths(-1)

なら、2020/01/29 がセットされる。やはり 1月の最終日ではない。

結局、翌月の最終日を求めようと思えば、単純に AddMonths を使うのではなく、

Dim old_mm As String = hoge_today.ToString("MM")
If hoge_today.AddDays(1).ToString("MM") <> old_mm Then
    saisyu_flg = 1
End If

みたいに最終日かどうかをチェックして、最終日だったときは、

Dim days As Integer = DateTime.DaysInMonth(hoge_today.AddMonths(1).Year, theDay.AddMonths(1).Month)
Dim hoge_addmon As DateTime = New DateTime(hoge_today.AddMonths(1).Year, hoge_today.AddMonths(1).Month, days)

みたいにしないとダメ?

すんまへん。VB.NET とかそんなに詳しいわけじゃないんで、もっとこんな簡単な方法が・・・みたいなものがあればご教示ください。>識者の方

このアーカイブについて

このページには、2020年10月以降に書かれたブログ記事のうちプログラミングカテゴリに属しているものが含まれています。

前のアーカイブはプログラミング: 2020年9月です。

次のアーカイブはプログラミング: 2020年11月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら