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

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

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

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

3110閲覧

javascriptやphpなどを使ってwavファイルのURLからデータの長さ(時間)を取得したい

bokupiroki

総合スコア54

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2020/02/06 04:55

編集2020/02/06 04:57

###実現したいこと・前提条件

  • 自分のサーバー(Wordpress運用中)にあるwavファイルの再生時間(長さ)を取得して出力したい
  • Audioタグは使わない
  • phpやjavascriptを使って取得したい

オーディオタグを使って、該当箇所のIDを指定すればjavascriptで実現できるような記事はいくつか見かけたのですが、
ファイルのURLを指定して情報を取得したいです。

###試したこと
例えば、単純にファイルのサイズを取得するだけであれば、下記の方法でできました。

php

1function get_filesize( $url, $unit = false, $decimals = 2 ) { 2 $headers = get_headers ( $url, 1 ); 3 if ( !empty ( $headers['Content-Length'] ) ) 4 $len = (int) $headers['Content-Length']; 5 else 6 return false; 7 if ( !$unit ) { 8 if ( $len >= pow ( 1024, 3 ) ) 9 $unit = 'GB'; 10 elseif ( $len >= pow ( 1024, 2 ) ) 11 $unit = 'MB'; 12 elseif ( $len >= 1024 ) 13 $unit = 'KB'; 14 else 15 $unit = 'B'; 16 } 17 if ( $unit == 'GB' ) 18 $len = number_format ( floor ( $len / pow ( 1024, 3 ) * 100 ) / 100, $decimals ) . $unit; 19 elseif ( $unit == 'MB' ) 20 $len = number_format ( floor ( $len / pow ( 1024, 2 ) * 100 ) / 100, $decimals ) . $unit; 21 elseif ( $unit == 'KB' ) 22 $len = number_format ( floor ( $len / 1024 * 100 ) / 100, $decimals ) . $unit; 23 elseif ( $unit == 'B' ) 24 $len = number_format ( $len ) . $unit; 25 return $len; 26} 27echo ( $len = get_filesize( 'ファイルのURL' ) ) ? $len : '取得できませんでした。';

引用元サイト
http://www.560designs.com/memo/1277.html

たぶん、phpオーディオをでファイルの長さを取得するのは無理なのではないかと思っています。

もしjQueryが必要であれば、読み込むべきプラグインやコードの書き方のヒントをいただきたいです。

###補足情報(FW/ツールのバージョンなど)
WordPress5.3.2
テスト環境サーバー:スターサーバー ライトプラン
phpバージョン:PHP7.3.14(意味ないかもしれませんが下げることは可能)

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

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

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

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

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

guest

回答2

0

ベストアンサー

JavaScriptのみで可能です。
HTMLMediaElement.duration MDN

投稿2020/02/06 05:35

kyoya0819

総合スコア10429

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

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

kyoya0819

2020/02/06 05:39

URLをもとに、videoタグをDOMで作ってそこから取り出せば良いのでは?
bokupiroki

2020/02/06 06:43

ありがとうございます。 いただいた情報を基に、DOMの使い方を現在調べながら進めております。 初歩的な質問で申し訳ないのですが、 wavファイルの長さを取得する場合であっても audioタグではなくvideoタグを使うのでしょうか。
kyoya0819

2020/02/06 06:45

wavならaudioタグでできるはずです
bokupiroki

2020/02/07 03:46 編集

ありがとうございます。 一旦動画ファイルで試しております。 javascriptで動的に「見えないvideo要素」を生成し、 そこから再生時間の情報を抽出すればいいとの理解に至りました。 そして、再生時間を取得して表示できるようになりました。 しかし、出力結果がまれに「NaN」の表記になってしまいます。 おそらくjavascriptや動画が読み込まれるタイミングが原因で 不安定になっていると考えているのですが、 何か対策するためのヒントをいただけないでしょうか。 --- <div style="display:none;" id="kokoyade"></div><!--ここに見えないオーディオタグを出力--> <span id="jikan"></span>秒<!--ここに再生時間を出力--> <script language="javascript" type="text/javascript"> // video要素を生成 var video = document.createElement('video'); // IDを追加 video.id = "mv"; // パスを追加(ここにURL) video.src = '動画のURL'; // 生成したvideo要素をhtml上の<div style="display:none;" id="kokoyade"></div>内に出力 document.getElementById('kokoyade').appendChild(video); //見えない場所にvideoタグを動的に生成 //videoオブジェクトの取得 ▼ var media = document.getElementById("mv"); //htmlの<span id="jikan"></span>内に出力 window.onload = function () { var movtime = media.duration; target = document.getElementById("jikan"); target.innerHTML = movtime; } </script> ---
kyoya0819

2020/02/07 04:17

aidio要素のonload発火にするとどうでしょう?
bokupiroki

2020/02/07 04:50

出力結果が、下記のようになればうまくいくのではないか?ということですね。 <div style="display:none;" id="kokoyade"><video id="mv" src="動画ファイルのURL" onload="関数名();"></video></div> javascriptで動的に生成されたvideo要素に対して、どうやって「onload="関数名();"」を追加するのかが分かりません。 試しにvideo要素にIDを追加した時と同じ感じで video.onload = "関数名();" ; とjavascriptに書いてみましたが、反映されませんでした。 変数videoの中身は下記です。 var video = document.createElement('video'); 正しい方法があればご教授願います。
bokupiroki

2020/02/08 00:47 編集

//video要素にonload追加 video.setAttribute("onload", "関数名();"); みたいな感じで追加できそうなことが分かりました。 また結果を報告します。
bokupiroki

2020/02/10 03:18

video.setAttribute("onload", "関数名();"); だと、なぜかjavascript自体が動きませんでした。 結局、「0.25秒待ってからjavascriptを走らせる」 という方法で様子見することにしました。 ありがとうございます。 以下、最終的なコードです。 <div style="display:none;" id="kokoyade"></div><!--ここに見えないオーディオタグを出力--> <span id="jikan"></span>秒<!--ここに再生時間を出力--> <script language="javascript" type="text/javascript"> // video要素を生成 var video = document.createElement('video'); // IDを追加 video.id = "mv"; // パスを追加(ここにURL) video.src = '動画のURL'; // 生成したvideo要素をhtml上の<div style="display:none;" id="kokoyade"></div>内に出力 document.getElementById('kokoyade').appendChild(video); //見えない場所にvideoタグを動的に生成 //videoオブジェクトの取得 ▼ var media = document.getElementById("mv"); //htmlの<span id="jikan"></span>内に出力 var jikankeisan = function () { var movtime = media.duration; target = document.getElementById("jikan"); target.innerHTML = movtime; } //0.25秒待ってから実行 setTimeout (jikankeisan,250); </script>
guest

0

問題を整理していきましょう。

最も気を付けなければいけない問題は
音楽の時間を知りたければ再生するしかないことです。
具体的に言うと、再生するつもりで音楽ファイルを開いて中を開けてみる必要があります。

PHPはWebサーバです。
基本的な用途?HTTPリクエストを待って、HTMLの文章作って投げ返すことですね。
アクセスが届いて、そこで音楽ファイルを鳴らしても何の役にも立ちません。

レンタルサーバを借りる為にさくらインターネットに契約したとすると
さくらインターネット社のマシンから突如音楽が鳴り始めるわけですよ。
馬鹿じゃねーの?アクセスした私が聴きたいのに!!
……という訳で、基本的にサーバマシンというものは音楽ファイルを扱う事は出来ません。

でもまぁ、音楽ファイルを扱う為のモジュールを組み込んで
実際に再生はしないけれど、再生出来るベースでファイルを開く事は可能なようです。
getID3()を使った音楽ファイルの情報取得


オーディオタグを使って、該当箇所のIDを指定すればjavascriptで実現できるような記事はいくつか見かけた

普段我々が閲覧するのに使っているChromeやFirefox等のブラウザ
これは用途によって音楽や動画を鳴らす可能性があるので、専用のモジュールが組み込まれています。
だからYouTubeにアクセスすれば動画を流せるんですね。

なので実現が楽なのは、
CSSdisplay: none等を組み込んだ不可視のaudioタグを設置して、
JavaScriptで対象の音楽ファイルを開きながらチェックしていくのが最も実装しやすいと思います。

上記のgetID3はバイナリ形式のファイルを開いてタグ情報を読みに行っているようなので
動きそうではありますが、C言語のツールを導入しなければならないようなものもありますので、
自分で好き勝手に弄れるVPSや専用サーバ等が必要になってくるかも知れません。

投稿2020/02/06 08:30

miyabi-sun

総合スコア21203

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

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

bokupiroki

2020/02/06 08:53

ありがとうございます。 だんだんわかってきました。 おっしゃるようにdisplay: noneにして、 タグの時間を取得できるところまで来たので うまく表示されるように現在調整中です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問