Music Sequence についての内容 ※間違いが含まれている場合があるので注意
#if TARGET_OS_IPHONE
// CAClock is currently not supported on iOS, so we include the definition of this structure here
// (otherwise we include the CAClock header
/*!
@struct CABarBeatTime
@abstract A display representation of a musical time in beats.
@field bar
A measure number.
@field beat
A beat number (1..n).
@field subbeat
The numerator of the fractional number of beats.
@field subbeatDivisor
The denominator of the fractional number of beats.
@field reserved
Must be 0.
@discussion
A clock's internal representation of musical time is in beats based on the
beginning of the timeline. Normally, such times should be displayed to the user
in terms of bars, beats, and subbeats (sometimes called "units" or "parts per
quarter" [PPQ]). This data structure is such a display representation.
By convention, bar 1 is the beginning of the sequence. Beat 1 is the first beat
of the measure. In 4/4 time, beat will have a value from 1 to 4. Music
applications often use beat divisions such as 480 and 960.
*/
struct CABarBeatTime {
SInt32 bar;
UInt16 beat;
UInt16 subbeat;
UInt16 subbeatDivisor;
UInt16 reserved;
};
typedef struct CABarBeatTime CABarBeatTime;
#else
#include
#endif
iOS は現在 CAClock に対応していないので、CABarBeatTime を利用する。 その名の通り、CoreAudio を小節・拍の時間を扱うもの。
[ccp] typedef struct OpaqueMusicPlayer *MusicPlayer; typedef struct OpaqueMusicSequence *MusicSequence; typedef struct OpaqueMusicTrack *MusicTrack; typedef struct OpaqueMusicEventIterator *MusicEventIterator;
/! @typedef MusicSequenceUserCallback @discussion See MusicSequenceSetUserCallback */ typedef void (MusicSequenceUserCallback)( void *inClientData, MusicSequence inSequence, MusicTrack inTrack, MusicTimeStamp inEventTime, const MusicEventUserData *inEventData, MusicTimeStamp inStartSliceBeat, MusicTimeStamp inEndSliceBeat);
/*! @enum MusicPlayerErrors @constant kAudioToolboxErr_InvalidSequenceType @constant kAudioToolboxErr_TrackIndexError @constant kAudioToolboxErr_TrackNotFound @constant kAudioToolboxErr_EndOfTrack @constant kAudioToolboxErr_StartOfTrack @constant kAudioToolboxErr_IllegalTrackDestination @constant kAudioToolboxErr_NoSequence @constant kAudioToolboxErr_InvalidEventType @constant kAudioToolboxErr_InvalidPlayerState @constant kAudioToolboxErr_CannotDoInCurrentContext */ enum { kAudioToolboxErr_InvalidSequenceType = -10846, kAudioToolboxErr_TrackIndexError = -10859, kAudioToolboxErr_TrackNotFound = -10858, kAudioToolboxErr_EndOfTrack = -10857, kAudioToolboxErr_StartOfTrack = -10856, kAudioToolboxErr_IllegalTrackDestination = -10855, kAudioToolboxErr_NoSequence = -10854, kAudioToolboxErr_InvalidEventType = -10853, kAudioToolboxErr_InvalidPlayerState = -10852, kAudioToolboxErr_CannotDoInCurrentContext = -10863 }; シーケンサー利用時のユーザ定義コールバック関数型 シーケンサーにMusicEventUserData が存在する場合、呼び出される。 MusicSequence、MusicTrack、MusicTimeStamp、MusicEventUserData 対応 MusicPlayerErrorsを 持つ
/*!
@enum MusicTrackProperties
@discussion Property values are always get and set by reference
@constant kSequenceTrackProperty_LoopInfo
read/write - MusicTrackLoopInfo
The default looping behaviour is off (track plays once)
Looping is set by specifying the length of the loop. It loops from
(TrackLength - loop length) to Track Length
If numLoops is set to zero, it will loop forever.
To turn looping off, you set this with loop length equal to zero.
@constant kSequenceTrackProperty_OffsetTime
read/write - MusicTimeStamp
offset's the track's start time to the specified beat. By default this value is zero.
@constant kSequenceTrackProperty_MuteStatus
read/write - Boolean
mute state of a track. By default this value is false (not muted)
@constant kSequenceTrackProperty_SoloStatus
read/write - Boolean
solo state of a track. By default this value is false (not soloed)
@constant kSequenceTrackProperty_AutomatedParameters
read/write - UInt32
Determines whether a track is used for automating parameters.
If set to != 0 the track is used to automate parameter events to an AUNode.
The track can only contain parameter events and these events are interpreted
as points in the automation curve
@constant kSequenceTrackProperty_TrackLength
read/write - MusicTimeStamp
The time of the last event in the track plus any additional time that is allowed for fading out of ending notes
or round a loop point to musical bar, etc.
If this is not set, the track length will always be adjusted to the end of the last active event in a track and
is adjusted dynamically as events are added or removed.
The property will return the max of the user set track length, or the calculated length
@constant kSequenceTrackProperty_TimeResolution
read only - SInt16 (only valid on the Tempo track)
This retrieves the time resolution value for a sequence. This time resolution can be the resolution that
was contained within the midi file used to construct a sequence. If you want to keep a time resolution
when writing a new file, you can retrieve this value and then specify it when creating a new file from a sequence.
It has no direct baring on the rendering or notion of time of the sequence itself (just its representation in file
formats such as MIDI files). By default this is set to either:
480 if the sequence is created manually
some_value based on what was in a MIDI file if the sequence was created from a MIDI file
*/
enum
{
kSequenceTrackProperty_LoopInfo = 0,
kSequenceTrackProperty_OffsetTime = 1,
kSequenceTrackProperty_MuteStatus = 2,
kSequenceTrackProperty_SoloStatus = 3,
// added in 10.2
kSequenceTrackProperty_AutomatedParameters = 4,
// added in 10.3
kSequenceTrackProperty_TrackLength = 5,
// added in 10.5
kSequenceTrackProperty_TimeResolution = 6
};
プロパティの値は、常に参照によるgetter、setter を用意している。 コンスタント kSequenceTrackProperty_LoopInfo = ループ情報。デフォルトのループは OFF(1回だけ再生) kSequenceTrackProperty_OffsetTime = 指定したビートにトラックのスタート時間(MusicTimeStamp)へオフセットする。デフォルトは0 kSequenceTrackProperty_MuteStatus = トラックのミュート状態。デフォルトは無効 kSequenceTrackProperty_SoloStatus = トラックのソロ状態。デフォルトは無効
/*!
@struct MusicTrackLoopInfo
@discussion Used to control the looping behaviour of a track
*/
typedef struct MusicTrackLoopInfo
{
MusicTimeStamp loopDuration;
SInt32 numberOfLoops;
} MusicTrackLoopInfo;
loopDuration = ループの長さ numberOfLoops = ループの回数
GDD 2011 では Web Audio API の反響が良かったですね。
基調講演ででもしてたサンプル WebAudio Drum HTML5 で作るっていう点ではかなり注目でした。 テンポも変えられるし、何よりデザインがかっこいい!
Plink by Dinahmoe (Web Audio API) YAMAHA でもネットワークセッションのネタが話題になりましたが、これも結構凄いと思いました。 DAW やってる人ならわかるかと思いますが、レイテンシーって凄くシビアなんですよね。 それをネットワークでやるってのは想像以上に大変そう。 プロユースには難しいかと思いますが、ユーザのコミュニティには十分かと思いました。
Sound Toy 楽器アプリも簡単に!? というか、各楽器の音を波形を自ら作ってるんですかこれ?
Chordlead でサンプリング方式で再生機能をつけてますが、FM音源方式はちょっと大変そう。。。
ちょっとだけ、ソースを見てみたけど、オーディオバッファや音程等は webkitAudioContext で全て管理してるようです。
SoundToy.prototype.noteOn = function( note )
{
var id = this.mId;
note += this.mOctave*12;
this.mId = (this.mId+1) % 8;
// copy data
var dbuf = this.mBuffer[id].getChannelData(0);
var num = this.mSLen;
var sbuf = this.mSamples[note];
for( i=0; i
MIDI シーケンサーは自作っぽいです。 ライブラリとかあるんですかね?
inputタグに「x-webkit-speech」をつけると音声を認識します。 webkitspeechchangeイベントリスナーで、音声認識の結果を出力しています。
マイクボタンを押して話しかけて下さい。
document.getElementById("speech-input-textbox").addEventListener("webkitspeechchange", function(event) {
var speechresults = document.getElementById('speech-results');
speechresults.innerHTML = '';
for (var res in event.results) {
speechresults.innerHTML += 'Utterance: ' + event.results[res]['utterance'] + '
Confidence: '
+ event.results[res]['confidence'] + '
';
}
}, false);
【Google Developer Day 2011 Japanレポート】
■MVCフレームワーク - Sproutcore - backbone.js - Ext-JS4(Sencha)
■参考サイト [GDD2011][HTML5]今までにないサイトを作る:HTML5 による最新ウェブアプリ
Titanium Studio の設定をもう少しカスタマイズしたいと思うも、Eclipse 標準設定やらAptana Studio の設定やらが混在していてちょっとわかりにくいので個人メモ。
「Titanium Studio > Preferences...」でほとんど設定できるかと思います。
個人的にはタブは嫌いなので、半角スペースに置き換えます。 まずグローバルな設定は、General > Editors > Text Editors で 【Insert spaces for tabs】 にチェック。 タブ幅は、Displayed tab with で「2」にしました。 ※一部ファイル種別によっては個別に指定する事もできます
色々アップデートしてたら、js ファイルだけセンテンスが真っ黒に!
グローバルの設定だとテーマ設定ができます。
が、自分は js ファイルだけおかしいようなので個別に設定してみる。 JavaScript > Syntax Coloring を開く。
Appearance color options: 欄があるので、ここでカラーを設定
GDD DevQuiz 2011 をやらずじまいだったので、ちょっとチェックしてみた。 そしたら、Google App Scripts なるものを今更知りました。。。
Google App Scripts は、Excel の VBA にあたるもので、Google Spreadsheet で利用できます。 JavaScript なので Web系の人にはすんなり入れるかと。
外部 JSON データを読み込んでみるサンプル
function loadCityData() {
var data = UrlFetchApp.fetch(url);
var json = Utilities.jsonParse(data.getContentText());
...
}
そして、デバッガーまでついてます! これは、デベロッパーじゃなくて一般の人でも覚えておいてよい技術じゃないでしょうか?
「できるExcel!」から「できる Google Spreadsheet! 」みたいな
会社の組織上、サポート部隊が社外に常駐しているのでコミュニティがとりにくい!
それを解決してくれるのが、社内SNSです。 うちの会社でも Yammer を導入してみました。
記事は古いですが、Yammer、SMART、Chatter~代表的な3つの社内 Twitter サービスを使ってみた で比較が書かれています。 今では日本語も対応してるし、Pagesの機能が良いですね。 利用実績の面から見ても、Yammer がとりあえず無難かな?と。 ただ管理機能とかは有料になるので、そこら辺がひっかかります。
あと、開発用のAPIも公開されています。
https://www.yammer.com/company/api
Yammer 標準の Air アプリもこのAPIを使って通信してるんですね(多分) これで、オリジナルアプリと連動も可能だ!
IDE 環境の選択にずっと迷ってたけど、Titanium Studio の選択もありかな?と思うようになりました。 Aptana Studio でもあり、Eclipse ベースですしね。
[Eclipse] Vrapper でvim風にする でも書いた通り、Vrapper を利用。
本当は、標準の Git で良いのだが、会社で SVN の資産が大きいのでインストール Aptana のSubversion ページでインストール方法が記載されている。
デフォルトだとURLが登録されていないようなので、Eclipse Helios Update Site を追加して検索
「SVN」で検索して Team Provider をインストール
で、終わりと思ったら、エラーでそのまま使えない模様(Eclipseのバージョン影響?) 再度インストール選択していく。
たまには雑感な日記でも。
昨日、FlexUG に言って知ったのですが・・・。 特に驚きもありませんが、Adobe は HTML5、AIR にいっそう注力できて逆に良いんじゃないでしょうか?
スマフォやりたい Flasher さんは AIR でとりあえず生き残れるわけですし
同じような ECMA Script ですしね。
スマフォの3Dアニメーション系に関しては Flash は消えたので、ネイティブで OpenGL、Unityでアプリを作るのがやはり標準化でしょうか?
HTML5 となると WebGL が標準になるでしょうが、今はまだ Windows95時代のような空気ですので、端末やネットワークの性能向上に比例していくんだと思います。
ただ開発ツールにおいては業界標準になるソリューションがなく、混沌としてるので良い意味では今は色んなやり方でお金なる、悪く言えば今は生産性が低くなる傾向があるので、エンジニアの能力に凄く左右されるな?と身が引き締まる思いです。 先日の GGD でも HTML5 のサンプルは高レベルなアプリの紹介がありましたが、それを物語ってました。
これから、HTML5 に関する情報は今まで以上にチェックしないといけない時代になった事は確かでしょうが、ブラウザ戦争の終戦を実に願うところです。
米Yahoo!がJavaScriptフレームワーク「Mojito」と、Node.jsのホスティング環境「Manhattan」発表。同一コードをブラウザ、サーバ、iOSアプリで実行可能
まるで映画!? Webページを3Dで表示するFirefoxアドオン登場