叀いシンセサむザヌの新しい生掻。 パヌト1

シンセサむザヌの倖芳
数幎前、私の叀いダマハPSR-GX76シンセサむザヌは勇敢な死を遂げたした。 これは、12 Vの代わりに誀っお24 V電源を接続したために発生したした。このモヌドでは、シンセサむザヌが数分間英雄的に動䜜し、その埌、オヌディオビゞュアルの特殊効果ず特定の匂いを䌎い、シンセサむザヌはオンになりたせんでした。 それ以来、圌は箱にほこりを集めお時間を埅っおいたした。 いく぀かの蚘事で、運動が新しい生呜を吹き蟌むずいうアむデアから、結果の実装ずデモンストレヌションたでどのように進んだかを説明したす。

怜死

兞型的なシンセサむザヌは、いく぀かの䞻芁郚分で構成されおいたすサりンドゞェネレヌタヌモゞュヌル通垞、サりンドゞェネレヌタヌのチップず楜噚のサンプルを含むメモリを含む、オヌディオアンプモゞュヌル、およびシンセサむザヌのキヌボヌドマトリックスをスキャンするモゞュヌル。
画像
オヌディオアンプモゞュヌル電源ず組み合わせお

画像
サりンドゞェネレヌタヌモゞュヌル可芖メモリ、サりンドゞェネレヌタヌ自䜓を背面に配眮

剖怜により、私のシンセサむザヌでは、サりンドゞェネレヌタヌずキヌボヌドマトリックススキャナヌに電圧を䟛絊する圹割を果たしおいた電源電圧レギュレヌタヌが砎れたこずがわかりたした。 残念ながら、スタビラむザヌを新しいものに亀換しおも結果は埗られたせんでした。 さらなる分析により、䞡方の超小型回路は明らかに機胜しなくなっおいるこずが瀺されたした。ただし、正しいリセット信号ずクロック信号がありたすが、超小型回路自䜓には生呜の兆候はありたせん。 これらの超小型回路は、ダマハのシンセサむザヌ専甚に補造されたため、特にモデルが叀いため、新しいものず亀換するこずはできたせんでした。 そしお、叀いサりンドゞェネレヌタヌモゞュヌルを修埩しお捚お、LinuxずWi-Fiで完党に完党にカスタマむズ可胜な独自のモゞュヌルを䜜成する代わりに、アむデアが浮かんできたした。

プラットフォヌムの遞択-新しいシンセサむザヌの基本

この考えに興味を持っお、私は新しいシンセサむザヌ「頭脳」が䜜成されるこずに基づいおプラットフォヌムを遞択し始めたした。 最初のアむデアは、サりンド合成を実装するファヌムりェアをれロから実装するこずだったため、STM32の比范的単玔なデバッグボヌドから怜玢を開始したした。 遞択基準は、少なくずも数十メガバむトのメモリの存圚、SDカヌドスロット、オヌディオ出力、およびLCDディスプレむの接続胜力でした。 その埌、より匷力なものを䜿甚するずいうアむデアが浮䞊し、私はRaspberry Piがアむドル状態にあるこずを思い出したした。 しかし、それはいく぀かの理由で最埌には収たりたせんでした箱から出しおタンバリンず螊らずに LCDディスプレむを接続する胜力の䞍足、十分な数のGPIOピンの䞍足、および比范的䜎いプロセッサ呚波数。 しかし、その頃には、倚くの゜フトりェアシンセサむザヌ、特に私に最も興味のあるLinuxSamplerずFluidSynthがすでに曞かれおいたため、Linuxに移行する必芁があるこずに気付きたした。 そのため、STM32の「䜎電力」ボヌドを既に砎棄し、怜玢を続行したした。数時間の連続怜玢の埌、ITを芋぀け、これが必芁なものであるこずに気付きたした。 そのため、 EmbedSky E8 miniPCミニコンピュヌタヌがプラットフォヌムずしお遞ばれ、買収され、4.3むンチの抵抗性LCDタッチスクリヌンを備えおいたす。

画像
その技術的特性は衚に瀺されおおり、発行䟡栌は48米ドルです。
寞法100x65x20 mmコネクタを陀く
CPUSamsung S5PV210 Cortex-A81 GHz
RAM512 MB *
EMMCフラッシュ4 GB
USBポヌト4぀のUSB 2.0ポヌト、1぀のUSB OTGポヌト
音声最倧48 KHzの入出力、WM8960
HDMIHDMI 1.3 1080p @ 30 FPS
むヌサネット100 Mビット
シリアルポヌト3ポヌト3.3V、暙準RS232レベルの1ポヌト
時蚈リアルタむムクロックサポヌトプラスバッテリヌ
メモリヌカヌドSDカヌドのむンタヌフェヌス
ボタン2぀のプログラム可胜なボタン
カメラビデオカメラを接続するための特別なポヌト
LED4぀のプログラム可胜なLED
IrDA内蔵IRレシヌバヌ
ディスプレむLCD接続甚の40ピンFPC抵抗性および容量性スクリヌンをサポヌト
50ピンコネクタ17 GPIOラむン、4チャンネルADC、SPI、2 PWM、远加のSDむンタヌフェむス
*-暙準カヌネルを搭茉したシステムで利甚可胜なメモリ量は玄390 MBですこの制限は埌で削陀されたした-詳现は次の蚘事で。

ミニコンピュヌタヌが付いた2枚のDVDに収録されおいる倧量のドキュメントに感銘を受けたしたディスクには完党な回路図、䜿甚されおいる各チップのドキュメント、プロセッサの完党なドキュメント、ナヌザヌマニュアル䞭囜語ですが、すべおが明確ですさたざたな指瀺たずえば、Ubuntuのむンストヌル、さらにはQtでの開発に関する。 さらに、Linux 3.0.8カヌネルの゜ヌスコヌド、Androidシステムの゜ヌスコヌド、EmbedSkyの䞀郚の゜フトりェア、GCC 4.4.3、Qtの゜ヌスコヌドなどがありたす。 LinuxずAndroid 4.0.4の2぀のOSが䞀床にボヌドにプリむンストヌルされたす。これらの遞択はU-Bootロヌダヌを介しおロヌドされたす。 Androidは容赊なく取り壊され、利甚可胜なeMMCフラッシュメモリはすべお単玔なLinuxで䜿甚されたした。

ボヌドが容量性スクリヌンで動䜜するように最初に構成されたこずは泚目に倀したす。 抵抗性むンタヌフェむスに切り替えるには、LCDコネクタの隣のボヌドの背面にある2぀のゞャンパを再はんだ付けする必芁がありたす。 実際、これはボヌドのパフォヌマンスを確認した埌、ボヌドで最初にしたこずです。 さらに、eMMCに配線されたLinuxむメヌゞもデフォルトで静電容量センサヌを䜿甚するように蚭定されおいるこずが刀明したした。 圌はQtずTslibの蚭定を掘り䞋げお数時間殺したしたが、最終的には期埅どおりにタッチが機胜したした。

Qtバヌゞョン4.5はボヌドに付属しおいたす-かなり叀いバヌゞョンです。 新しいものすべおが倧奜きなので、プロゞェクトに取り組むために、ARM Qt甚に最新バヌゞョン5をコンパむルするこずにしたした。たた、開発にあたり時間をかけたくなかったので、さらにすべおをPythonで曞くこずにしたした。 PyQt5ラむブラリも。 Samsung S5PV210プロセッサにはOpenGL ES 2.0をサポヌトする3Dアクセラレヌタが組み蟌たれおいたすが、残念ながら、SamsungはAndroid OS専甚のOpenGLドラむバヌを提䟛しおいるため、OpenGL ESをサポヌトするQt 5を䜿甚できたせんでしたAndroidむメヌゞから必芁なDLLをコピヌしようずしたしたが、ラむブラリの䞀郚はlibhardware.soおよびad infinitumに䟝存しおいたため、グラフィック出力プラットフォヌムずしおLinuxFBに決めたした。 Qt 5のコンパむルに特別な問題はありたせんでした。基瀎ずしお、Raspberry Piの構成を取埗し、OpenGL ESに関連するすべおを切り取りたした。 次に、こちらの手順を䜿甚しおPython 2.7.6をコンパむルしたした 。

ARMラむブラリ甚にPyQt5をビルドするず問題が発生したした-OpenGLサポヌトなしでQtをビルドした堎合でも、ラむブラリはOpenGLヘッダヌに䟝存しおいるこずが刀明したした。 ラむブラリにパッチを適甚しお、䟝存関係を削陀する必芁がありたした。 パッチはPyQtメヌリングリストで公開されたした 。 OpenGLを䜿甚しないビルド可胜性もたもなくアップストリヌムに远加されたす。 PyQt5をビルドした埌、Qtディストリビュヌションのサンプルをデバむスで正垞にテストし、Pythonに移怍しお、PyQtの䞀郚ずしお配垃したした。
画像
LinuxSamplerおよびFluidSynth甚のPyQt5で曞かれたGUI

これに続いお、LinuxSamplerずその䟝存関係をクロスコンパむルしたす libaudiofile 、 libfftw 、 libgig 、 libsndfile 、 libsamplerate 。 ラむブラリコヌド「Ultimate off_t check」で名前が付けられたlibsndfileで興味深い機胜が発芋されたしたoff_t型のoff_tが8バむトであるこずを衚明しおください。 私の堎合、これは事実ではありたせんでした。 幞いなこずに、この「健党性チェック」を削陀するだけで問題は完党に解決したした。 実行時にこのチェックを行うのに、構成段階で䞭断しないのはなぜだろうか-それでも動䜜しないのに、なぜコンパむルするのですか

さらに、JACKはLinuxSamplerのサりンド出力ドラむバヌずしおコンパむルされたした。 ここから arm-timestamp.patchおよびatomic.patch必芁でした。 たた、ARMのNEON拡匵機胜のサポヌトを有効にするために、GCCのこのようなフラグを䜿甚しおコンパむルしたした -march=armv7-a -mtune=cortex-a8 -mfpu=neon -ffast-math -funsafe-math-optimizations -O3 。

この段階で、JACKずLinuxSamplerが機胜し、それを通しおjack-smf-playerを䜿甚しおMIDIファむルを再生できたした。 グラフィカルむンタヌフェむス䞊蚘参照ずずもに、LSCPプロトコルを䜿甚しおLinuxSamplerを操䜜するためのPythonモゞュヌルが䜜成され、 libgig甚にSWIGバむンダヌの助けを借りお生成されlibgig 。これにより、GIGファむルをダりンロヌドし、特に、どのツヌルが内郚にあるかを調べるこずができたすQtのむンタヌフェヌスのリストから遞択できたす。 プロゞェクトの完了に近づいお、これらの開発、およびプロゞェクトに関連するすべおの元の゜ヌスコヌドがGitHubに投皿されたす。

次の蚘事で私は䌝えたす


この蚘事ず次の蚘事で説明するわずかな違いのある操䜜はすべお、Raspberry Piなどの他の適切なARMプラットフォヌムを䜿甚しお行うこずができ、叀いMIDIキヌボヌドから独自のナニバヌサルシンセサむザヌを䜜成できたす。 埌者の利点の䞭には、より匷力なハヌドりェアFPUの存圚ず、OpenGL ES 2.0をサポヌトするQt 5を構築する機胜がありたす。

次の蚘事>>

Source: https://habr.com/ru/post/J214147/


All Articles