Repl-Mac用の小さなオープンプレーヤー

画像



少し前に、私はMacに切り替えて、日常的に使用するソフトウェアを選択し始めました。 オーディオプレーヤーで問題が発生しました。 私は多くのプレーヤーを試しましたが、私に適したプレーヤーはいませんでした。 そこで私は自分で書くことにしました。 同時に、Objéctive-Cfor Macでの開発に興味がありました。



その結果、 リプレイプレーヤーを取得しました。これは「レジデントプレーヤー」を意味します。



オーディオプレーヤーの要件



オーディオプレーヤーにすべきことに関して、次の考慮事項があります。



1.オーディオプレーヤーにはグラフィカルインターフェイスは必要ありません。


サウンドはバックグラウンドで送られるため、見る必要はありません。そのため、オーディオプレーヤー用のグラフィカルインターフェイスを作成する必要はありません。 もちろん、プレーヤーは何らかの方法で制御する必要がありますが、すべての制御はメニュー、開始/一時停止、次および前のトラックの4つのボタンに減らすことができます。



これらのボタンはステータスバーに完全に収まり、常にクリックするだけです。 また、開いているアプリケーションからフォーカスを切り替える必要はありません。



2.オーディオプレーヤーに独自のライブラリは必要ありません。


音楽ストレージの整理は、ファイルシステムを使用して適切に行われます。 ほとんどの場合、音楽コレクションは階層構造(たとえば、ジャンル-アーティスト-アルバム-トラック)を持ち、ファイルシステムのサブフォルダーを使用して問題なく再生されます。 さらに、フォルダーからは、id3タグの限定セットからよりも分岐構造を作成できます。



さらに、通常のファイルでは、実際にリスニングに関連付けられていないさまざまな操作を実行する方がはるかに便利です。 最初にライブラリからエクスポートするか、ライブラリに表示されているファイルが保存されている正確な場所を探すよりも、ファイルのあるいくつかのフォルダを直接コピーする方がはるかに簡単だとしましょう。



3.オーディオプレーヤーにはプレイリストは必要ありません。


ファイルシステム内によく整理され、構造化されたトラックのコレクションがある場合は、再生に必要なフォルダーを開くだけです。 必要な場合-必要に応じて1つのアルバムを開きます-必要に応じて複数の異なるアルバム-すべてのアルバムを持つアーティスト。



ファイルとプレーヤーの間にレイヤーを作成する必要はありません。プレーヤーはディスクの内容を「そのまま」再生するだけです。



開発



その瞬間まで、私はMac全般、特にObjective-C向けにプログラミングしたことは一度もありませんでした。 そこで、Objective-Cの研究と並行してこのプレーヤーを作成しました。



結局のところ、ネットワーク上でロシア語でMacを開発することに関する記事はほとんどありません。 ネイティブのAppleのドキュメントはおそらく多くの情報を提供しますが、非常に膨大であり、英語で読むことは困難です。 ほとんどの情報、主にコード例、私はStackOverflowなどの英語のリソースを利用する必要がありました。



プレーヤーがどうあるべきか、どのように見えるべきか、どのような機能を持つべきかを正確に知っていました。 そのため、思いやりのある設計段階はありませんでした。 出てきた各質問の手順を見つけて、そこにコードを書いたところです。 その過程で、Xcodeの設定方法、ステータスバーにアプリケーションアイコンを配置する方法、ファイルの読み取り方法など、LJにいくつかのメモを書きました。 自分のための一種の教科書。



最も困難な問題は音の再現でした。 私はNSSoundクラスの実験を始めました。 私が理解しているように、これはObjective-Cでサウンドを再生するための一種の「標準」クラスです。 最初は、このクラスでサウンドを再生することができなかったため、次のトラックを開始するためにトラックが終了した瞬間を把握できませんでした。 NSSoundクラスはプレーヤーでの使用を意図したものではなく、ファイルのアップロードの終了に関する信号などの短いサウンドを1回再生する必要があるという印象を受け始めました。



それから、 AV Foundationフレームワークを理解しようと決めました。間違いなくその上にプレーヤーを書くことができます。 しかし、どういうわけか私はNSSoundに音を鳴らす方法を促され、トラックの終わりを自分でキャッチする方法を学びました。 そして、NSSoundベースのプレーヤーを作成しました。



残念ながら、このクラスはひどい力で記憶を消耗します。 新しいトラックを再生するために一定量のメモリが割り当てられ、トラックの終了後、メモリは解放されません。 ここでは、私は何かを理解せずにコードを曲がって書いただけか、NSSoundは実際には1つの固定サウンドの単一の再生のみを目的としています。 質問を知っている人がこの問題を克服する方法を教えてくれた場合、私は非常に感謝します。



ファイルの読み取りやメニューの作成など、他の問題は私には複雑に思えませんでした。 まあ、新しい技術を研究するときに生じる他の質問ほど複雑ではありません。 プレーヤーの作成時に、LJにもいくつかのメモを書きました。



結果



その結果、私は完全に自分に合ったオーディオプレーヤーを自分で書きました。 そして今、私はすべての人と結果を共有したいと思います。



リプレイはオープンで完全に無料のプレーヤーです。 すべてのソースコードはGithubにありますが、 Replayに結び付けたい機能の小さなリストもあります。



私はコメントと提案だけでなく、プルリクエストになります:)



UPD。 AVFoundationのプレーヤーを書き直しました。

UPD2。 この記事は約1年間ドラフト形式であったため、一部の古いコメントはもはや関連性がない可能性があります。



All Articles