pythonで音声を再生するのこと その3
その2の続き。
再生の手順としては、基本的にpygameの時とは変わらない。
ライブラリの初期化 → 音声のロード → 再生・停止 → ライブラリの開放
といった手順はわかるものの、どう書くのか。
pythonのサンプルも見つけられなかったので、
sdl-mixerのサイトからダウンロードできるC用のサンプルを参考に作ってみた。
一応、使う関数は以下の通り。
パッケージ | 関数 | 備考 |
sdl2 | SDL_Init | ライブラリの初期化。 引数に初期化対象を指定する必要がある。 pygame.init()に当たる。 |
sdl2 | SDL_Quit | ライブラリの開放。 |
sdl2.sdlmixer | Mix_Init | ミキサーの初期化。再生対象のファイル形式を指定する。 pygame.mixer.init()にあたる。 |
sdl2.sdlmixer | Mix_OpenAudio | ミキサーの再生クオリティを指定する。 pygame.mixer.init()にあたる。 |
sdl2.sdlmixer | Mix_LoadMUS | 音声ファイルの読み込み。 pygame.mixer.music.load()にあたる。 |
sdl2.sdlmixer | Mix_PlayMusic | 音声ファイルの再生。 pygame.mixer.music.play()にあたる。 |
sdl2.sdlmixer | Mix_PauseMusic | 再生の停止。 pygame.mixer.music.pause()にあたる。 |
sdl2.sdlmixer | Mix_FreeMusic | 音声ファイルの開放。 |
以下にソース。
# -*- coding: utf-8 -*- from ctypes import * from sdl2 import * from sdl2.sdlmixer import * from time import sleep if __name__ == u"__main__": SDL_Init(SDL_INIT_AUDIO) Mix_Init(MIX_INIT_MP3) Mix_OpenAudio(22050, AUDIO_S16, 2, 4096) path = c_char_p(b"MP3のファイルパス") music = Mix_LoadMUS(path) Mix_VolumeMusic(64) Mix_PlayMusic(music, 1) sleep(300) Mix_PauseMusic() Mix_FreeMusic(music) SDL_Quit()
とまぁ、簡単に音が出る、けれど、注意点もある。
関数呼び出しのパラメータと復帰値については注意が必要。
基本、こいつらはCの型を要求する。
pythonの型からCの型へ変えてやらないと、うまく実行できない。*1
Mix_LoadMUSの引数は、libsdl-mixerでは、char *なので、
ここではctypesを使って、byte列をCのchar *に変えて渡している。
また、ここではチェックを省いているが、
復帰値は関数実行の成否を表しているので、都度、チェックを行い、
エラー時には中断するなりのエラーハンドリングを書いてやる必要がある。
それさえ気をつければ、pygameのように扱える、と思う。
*1:正確にはpysdl2がそういうスタンスだからだが。。。
pythonで音声を再生するのこと その2
前にpythonでMP3を再生する方法を書いた。
あの時のソースをpython3で実行してみたら、ちょっとした問題があることがわかった。
python3 + pygameでは音割れがひどく、まともに再生できない場合がある。
(PC毎に症状が違うし、正しく再生できる時もたまにある)
これはイカンと思い、pygameに変わる別のライブラリとして、
pysdl2を使うことにした。
Welcome to PySDL2’s documentation! — PySDL2 0.9.5 documentation
pysdl2はpygameの後継と言われている(らしい)ライブラリではあるけれど、
C言語用のSDLライブラリのpythonラッパーととらえるべきで、
pygameよりは扱いが多少、難しい...と言うよりは面倒な印象。
ともかく、使ってみることにした。
まずは、導入方法から。
OSのパッケージマネージャからインストール
# python2の場合 sudo apt-get install python-sdl2 # python3の場合 sudo apt-get install python3-sdl2
Djangoをやってみよう。 その2-Djangoプロジェクトの作成-
Djangoプロジェクトを作ってみる。
ブランクプロジェクトの作成
ブランクプロジェクトはdjango-adminコマンドを使って作る。
オプションにstartprojectを指定し、パラメータにプロジェクト名を入力する。
django-admin startproject hello
出来上がったプロジェクトはこんな感じ。
hello ├── hello │ ├── __init__.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py └── manage.py
ファイル | 概要 |
---|---|
hello | プロジェクトディレクトリ |
hello(内側の) | パッケージディレクトリ |
__init__.py | パッケージファイル |
settings.py | 設定ソース。 プロジェクトの設定を司る。 |
urls.py | プロジェクトのURLを定義するファイル |
wsgi.py | WSGI互換Webサーバー用のエンドポイントを司る。 |
manage.py | コマンドラインユーティリティ。プロジェクトを作る上で様々な用途がある。 |
サーバー起動
生成されたmanage.pyを使ってサーバーを立ち上げる。
python manage.py runserver
ターミナルに起動情報が表示されるのでブラウザから繋いでみる。
この画面が表示されればOK。
ちなみにポート番号だけ指定したい場合は、以下のようにする。
python manage.py runserver 8080
IPアドレスとポート番号を指定したい場合にはこうなる。
python manage.py runserver {IPアドレス}:{ポート番号}
と、ブランクプロジェクトの作成はここまで。
ソースの追加は次回につづく。
Pythonの仮想環境を作ってみるのこと
今更だけど、pythonの仮想環境を作ってみる。
というのも、python3 + Djangoを試してみたいからだ。
一応、python2版のDjangoならば、
パッケージマネージャからインストールできるのだが、
バージョンが古いのでDjangoのチュートリアルすら実行できない。
したがって、今回は仮想環境を作り、
仮想環境上にDjangoをインストールしてみようと思う。
仮想環境の構築
まず、virtualenvという仮想環境を構築できるツールをインストールする。
sudo apt-get install virtualenv
インストールしたらvirtualenvを使って仮想環境を作る。
virtualenv -p /usr/bin/python3 py3env
オプションで指定しているのは仮想環境で使用するPythonインタプリタのパス。
未指定の場合は、システムデフォルトのPythonインタプリタが使われる。
パラメータには作成する仮想環境のパスを指定する。
コマンドが終了すると環境の出来上がり。
仮想環境の有効化
ターミナルから作成した仮想環境に移動して、環境を有効化するコマンドを実行する。
仮想環境のbinディレクトリ配下にあるactivateファイルをsourceコマンドで読みこめば良い。
source bin/activate
コマンド実行後、
ターミナル上のユーザ名の前に仮想環境名が表示されれば成功。
ついでにPythonのバージョンを見てみる。
Pythonのバージョンが3.5になっているのがわかる。
ここで仮想環境を抜けてみる。
抜けるにはdeactivateコマンドを使う。
仮想環境を抜けたあとのPythonのバージョンを見てみる。
Pythonのバージョンが2.7.11でデフォルト環境が維持されているのがわかる。
というわけで仮想環境ができた。
以降、この環境を使ってDjangoを試してみる。
ちなみに仮想環境を破棄するには、ディレクトリ毎削除してしまえば良い。
追記: virtualenvのオプションについて。*1
上の例ではpythonインタプリタのパスをオプション指定していたが、
これだと含有するパッケージはほぼ空なので、
必要なパッケージをpipでインストールする必要がある。
そこで、--system-site-packagesを追加してやると、
コピー元となるシステム上のpython環境にインストールされているパッケージも
コピーしてくれる。
手間を考えるとこっちのが便利だね。
virtualenv -p /usr/bin/python3 --system-site-packages py3env
SQuirreL SQLのこと その4
おまけ。
SQuirreL SQLでSqliteを使いたい場合について。
ドライバリストにSqliteが無いからと言って使えない、というわけではないらしい。
Java製だからJDBCドライバがあれば接続できるようだ。
ついでに、以下にメモっておく。
ここのサイトが参考となった。
Accessing SQLites database using SQuirrel SQL Client
上記サイトの内容を参考に、新規ドライバを追加する。
注意点としてはWebサイトURLとして書かれているURLはリンク切れしている。
必要に応じて、SqliteなりSqlite JDBCドライバのWebページへのリンクを書いておくと良い。
ちなみにJDBCドライバは下記から取得した。
xerial / sqlite-jdbc — Bitbucket
ドライバの定義後、エイリアス設定をする。
サンプルにしたがって書けばよく、
[jdbc:sqlite://]の後ろにデータベースファイルのパスを記載するだけで良い。
接続するとちゃんとデータが拾える。
うむうむ、問題ない。
SQuirreL SQLのこと その3
その2のつづき。
ここではHSQLDBを使用しているのでその手順となる。
まずは、JDBCドライバを認識させる。
アプリ上からドライバをダウンロードする機能はない*1ので自前で用意する。
HSQLDBはインストールディレクトリのlibにドライバがあるので今回はこれを使う。
ドライバのタブを押して一覧を出し、
設定するドライバを選択する。
[選択したドライバの編集]ボタンを押して編集画面を出し、
追加クラスパスのタブでドライバファイルを追加する。
正しく認識されるとドライバリストにチェックマークが付く。
エイリアスのタブを押し、[エイリアスの追加]から接続設定を追加する。
接続文字列についてはJDBCの記法と同じなので、いつも通り書けば良い。
OKボタンを押して、DB接続すると正しく情報が取得できる。
SQLもこの通り。
コード補完もあるし、なかなか便利。
*1:ドライバ毎にドライバのWebサイトを開く機能はある