ABAP New open SQL:ACDOCAの日次BS勘定の残高取得

久しぶりの技術系の投稿です。
実はプロジェクトが変わりました。そして、念願(!??)のABAP CDS viewの実装の担当になりました。なのになぜ?ABAP New open SQLなのか?いろいろ実装してみたところ、トライ&エラーを繰り返すのはNew open SQLのほうがやりやすかったからです。
今回紹介するSELECT文は、ABAP CDS viewに移植可能なものとなっています。パフォーマンスについては未知数ですが、期待した動作をしています。流用するときはご一報ください。知的財産云々もありますが、パフォーマンスデータを共有したいのです。

紹介するプログラムは、以下項目を一覧取得します。
使用したSELECT文の機能要素は以下の通りです。
・WITH句による段階的ロジック
・集合関数:SUM()およびGROUP BYによる集計
・不等号条件によるテーブル自己結合
・HAVING句によるレコードフィルタ
・ORDER BY句による結果セットの並び替え
こんなところでしょうか...

なお、当プログラムは、答え合わせのために、前半はBS勘定の日次の合計金額を単純に出力していて、後半でBS勘定残高を取得しています。そして、パフォーマンスデータも取得できるようにしています。

検索項目
・台帳(必須項目) : 0L :リーディング元帳固定
・会社コード
・会計年度
・勘定コード(BS勘定)

一覧項目
・台帳
・会社コード
・会計年度
・転記日付
・勘定コード(BS勘定)
・会社通貨
・会社通貨の残高(BS残高)

参考1:
ACDOCAのBS残高を取得するには?
ACDOCAのBS残高は、会計年度が切り替わるタイミングで、転記日付初期値の期首残高レコードを作成します。そのため、転記日付2020-07-31時点のBS残高を取得しようとすると、会計年度の期首残高レコードと会計年度期首から転記日付2020-07-31の全ての仕訳明細の合計値を計算します。
従来のITABおよびABAPロジックによるループを使用した実装では、素のACDOCAのレコードを取得して、ループ処理の中で1件ずつ加算していくと思います。おそらくですがオンラインプログラムではパフォーマンスの問題で使い物にならないかもしれません。また、上手に実装しないとソースコードメンテナンスに耐えがたいプログラムになる可能性があります。

参考2:
ABAP CDS Viewの移植に関して。(私的感想)
もしかしたら、ここが最も価値ある情報かもしれません。無いかな。(笑)
実感としては、SAP標準のABAP CDS viewを使わないで開発するのは、非効率的と思いました。一方でSAP標準のABAP CDS viewを考慮した基本設計が出来る人材は稀有です。私が当機能をABAP CDS viewに移植するのに、ABAP CDS viewは都合5個作成しました。作成手順は愚直に1文字ずつSELECT文のコーディング作業となります。従来のITABおよびABAPロジックによるループを使用した実装よりはましですが、正直骨が折れました。
では、自身の中で何がベストかというと...HANA infomation viewをABAP CDS viewでラッピングする方法かなぁ~。パフォーマンスに関してはぶっちぎりで良いと思います。クライアントおよび権限実装についてはABAP CDS viewのラッピング部分で実装すれば良いと思います。Fiori like applicationや、BWを介したAnalysisOfficeへの展開も可能です。機能的には問題ないと思います。そして、HANA infomation viewのドラッグ&ドロップによる実装が群を抜いて効率が良いと思います。PoweruserによるEUCを意識しているので当然と言えば当然ですね。

少しプログラムを改変しました。(20200908)

REPORT Y_SQL_CONSOLE.

*-----------------------------------------------------------------------
* GLOBAL VARIABLE
*-----------------------------------------------------------------------
DATA GDF_SUBRC TYPE SY-SUBRC.

*-----------------------------------------------------------------------
* CONDITION VIEW
*-----------------------------------------------------------------------
DATA GDF_RBUKRS TYPE ACDOCA-RBUKRS.
TYPES GTR_RBUKRS LIKE RANGE OF GDF_RBUKRS.
SELECT-OPTIONS S_RBUKRS FOR GDF_RBUKRS.           "会社コード

DATA GDF_RACCT TYPE ACDOCA-RACCT.
TYPES GTR_RACCT LIKE RANGE OF GDF_RACCT.
SELECT-OPTIONS S_RACCT FOR GDF_RACCT.             "勘定コード

*-----------------------------------------------------------------------
* START-OF-SELECTION
*-----------------------------------------------------------------------
START-OF-SELECTION.
  PERFORM START_OF_SELECTION
    USING
      S_RBUKRS[]
      S_RACCT[]
    CHANGING
      GDF_SUBRC.

*-----------------------------------------------------------------------
* SUBROUTINE
*-----------------------------------------------------------------------
FORM START_OF_SELECTION
    USING
      PIR_RBUKRS TYPE GTR_RBUKRS
      PIR_RACCT TYPE GTR_RACCT
    CHANGING
      POF_SUBRC TYPE SY-SUBRC.
*-----------------------------------------------------------------------
* Please write the SQL statement here ☆
* Set the internal table to be stored to LDT_DATA ☆
* Inline definition of LDT_DATA is fun ☆
  SELECT
    FROM ACDOCA
    INNER JOIN SKA1
       ON SKA1~KTOPL = ACDOCA~KTOPL
      AND SKA1~SAKNR = ACDOCA~RACCT
      AND SKA1~XBILK = @ABAP_TRUE
    LEFT OUTER JOIN SKAT
       ON SKAT~SPRAS = @SY-LANGU
      AND SKAT~KTOPL = SKA1~KTOPL
      AND SKAT~SAKNR = SKA1~SAKNR
    FIELDS COUNT( * )
    WHERE ACDOCA~RLDNR = '0L'
      AND ACDOCA~RBUKRS IN @PIR_RBUKRS
      AND ACDOCA~RACCT IN @PIR_RACCT
    INTO @DATA(LDF_INPUT_RECORDS).

  SELECT
    FROM ACDOCA
    INNER JOIN SKA1
       ON SKA1~KTOPL = ACDOCA~KTOPL
      AND SKA1~SAKNR = ACDOCA~RACCT
      AND SKA1~XBILK = @ABAP_TRUE
    LEFT OUTER JOIN SKAT
       ON SKAT~SPRAS = @SY-LANGU
      AND SKAT~KTOPL = SKA1~KTOPL
      AND SKAT~SAKNR = SKA1~SAKNR
    FIELDS
      ACDOCA~RLDNR,                               "総勘定元帳の元帳
      ACDOCA~RBUKRS,                              "会社コード
      ACDOCA~GJAHR,                               "会計年度
      ACDOCA~BUDAT,                               "伝票の転記日付
      ACDOCA~RACCT,                               "勘定コード
      SKA1~XBILK,                                 "フラグ: 貸借対照表勘定
      SKAT~TXT20,
      ACDOCA~RHCUR,                               "会社コード通貨
      SUM( ACDOCA~HSL ) AS HSL                    "会社コード通貨での金額
    WHERE ACDOCA~RLDNR = '0L'
      AND ACDOCA~RBUKRS IN @PIR_RBUKRS
      AND ACDOCA~RACCT IN @PIR_RACCT
    GROUP BY
      ACDOCA~RLDNR,                               "総勘定元帳の元帳
      ACDOCA~RBUKRS,                              "会社コード
      ACDOCA~GJAHR,                               "会計年度
      ACDOCA~BUDAT,                               "伝票の転記日付
      ACDOCA~RACCT,                               "勘定コード
      SKA1~XBILK,                                 "フラグ: 貸借対照表勘定
      SKAT~TXT20,
      ACDOCA~RHCUR                               "会社コード通貨
    ORDER BY
      ACDOCA~RBUKRS,                              "会社コード
      ACDOCA~RACCT,                               "勘定コード
      ACDOCA~GJAHR,                               "会計年度
      ACDOCA~BUDAT                                "伝票の転記日付
    APPENDING TABLE @DATA(LDT_DATA) UP TO 10000 ROWS.

  APPEND INITIAL LINE TO LDT_DATA.
  APPEND INITIAL LINE TO LDT_DATA.
  APPEND INITIAL LINE TO LDT_DATA.

  DATA LDF_TIMESTAMP_START TYPE TIMESTAMPL.       "タイムスタンプデータ取得開始
  GET TIME STAMP FIELD LDF_TIMESTAMP_START.       "タイムスタンプデータ取得開始

  WITH
  +ACDOCA AS (
  SELECT
    FROM ACDOCA
    INNER JOIN SKA1
       ON SKA1~KTOPL = ACDOCA~KTOPL
      AND SKA1~SAKNR = ACDOCA~RACCT
      AND SKA1~XBILK = @ABAP_TRUE
    LEFT OUTER JOIN SKAT
       ON SKAT~SPRAS = @SY-LANGU
      AND SKAT~KTOPL = SKA1~KTOPL
      AND SKAT~SAKNR = SKA1~SAKNR
    FIELDS
      ACDOCA~RLDNR,                               "総勘定元帳の元帳
      ACDOCA~RBUKRS,                              "会社コード
      ACDOCA~GJAHR,                               "会計年度
      ACDOCA~BUDAT,                               "伝票の転記日付
      ACDOCA~RACCT,                               "勘定コード
      SKA1~XBILK,                                 "フラグ: 貸借対照表勘定
      SKAT~TXT20,
      ACDOCA~RHCUR,                               "会社コード通貨
      SUM( ACDOCA~HSL ) AS HSL                    "会社コード通貨での金額
    WHERE ACDOCA~RLDNR = '0L'
      AND ACDOCA~RBUKRS IN @PIR_RBUKRS
      AND ACDOCA~RACCT IN @PIR_RACCT
    GROUP BY
      ACDOCA~RLDNR,                               "総勘定元帳の元帳
      ACDOCA~RBUKRS,                              "会社コード
      ACDOCA~GJAHR,                               "会計年度
      ACDOCA~BUDAT,                               "伝票の転記日付
      ACDOCA~RACCT,                               "勘定コード
      SKA1~XBILK,                                 "フラグ: 貸借対照表勘定
      SKAT~TXT20,
      ACDOCA~RHCUR )                              "会社コード通貨
  SELECT
    FROM +ACDOCA AS ACDOCA0
    INNER JOIN +ACDOCA AS ACDOCA1
       ON ACDOCA1~RLDNR = ACDOCA0~RLDNR           "総勘定元帳の元帳
      AND ACDOCA1~RBUKRS = ACDOCA0~RBUKRS         "会社コード
      AND ACDOCA1~GJAHR = ACDOCA0~GJAHR           "会計年度
      AND ACDOCA1~BUDAT <= ACDOCA0~BUDAT          "伝票の転記日付
      AND ACDOCA1~RACCT = ACDOCA0~RACCT           "勘定コード
      AND ACDOCA1~RHCUR = ACDOCA0~RHCUR           "会社コード通貨
    FIELDS
      ACDOCA0~RLDNR,                               "総勘定元帳の元帳
      ACDOCA0~RBUKRS,                              "会社コード
      ACDOCA0~GJAHR,                               "会計年度
      ACDOCA0~BUDAT,                               "伝票の転記日付
      ACDOCA0~RACCT,                               "勘定コード
      ACDOCA0~XBILK,                                 "フラグ: 貸借対照表勘定
      ACDOCA0~TXT20,
      ACDOCA0~RHCUR,                               "会社コード通貨
      SUM( ACDOCA1~HSL ) AS HSL_SUM                "会社コード通貨での金額
    GROUP BY
      ACDOCA0~RLDNR,                               "総勘定元帳の元帳
      ACDOCA0~RBUKRS,                              "会社コード
      ACDOCA0~GJAHR,                               "会計年度
      ACDOCA0~BUDAT,                               "伝票の転記日付
      ACDOCA0~RACCT,                               "勘定コード
      ACDOCA0~XBILK,                                 "フラグ: 貸借対照表勘定
      ACDOCA0~TXT20,
      ACDOCA0~RHCUR                                "会社コード通貨
    HAVING ACDOCA0~BUDAT IS NOT INITIAL            "伝票の転記日付
    ORDER BY
      ACDOCA0~RBUKRS,                              "会社コード
      ACDOCA0~RACCT,                               "勘定コード
      ACDOCA0~GJAHR,                               "会計年度
      ACDOCA0~BUDAT                                "伝票の転記日付
    APPENDING TABLE @LDT_DATA UP TO 10000 ROWS.

  DATA LDF_TIMESTAMP_END TYPE TIMESTAMPL.         "タイムスタンプデータ取得終了
  GET TIME STAMP FIELD LDF_TIMESTAMP_END.         "タイムスタンプデータ取得終了
*-----------------------------------------------------------------------
  TRY.
      CL_SALV_TABLE=>FACTORY(
        IMPORTING
          R_SALV_TABLE = DATA(LDO_ALV)
        CHANGING
          T_TABLE  = LDT_DATA ).
    CATCH CX_SALV_MSG INTO DATA(LDX_SALV_MSG).
      POF_SUBRC = 8.
      RETURN.
  ENDTRY.

  DATA(LDO_HEADER) = NEW CL_SALV_FORM_LAYOUT_GRID( ).

  DATA(LDO_H_LABEL) = LDO_HEADER->CREATE_LABEL( ROW = 1 COLUMN = 1 ).
  LDO_H_LABEL->SET_TEXT( 'Performance data' ).

  DATA(LDO_H_FLOW) = LDO_HEADER->CREATE_FLOW( ROW = 2  COLUMN = 1 ).
  LDO_H_FLOW->CREATE_TEXT( TEXT = 'Input records' ).
  LDO_H_FLOW = LDO_HEADER->CREATE_FLOW( ROW = 2  COLUMN = 2 ).
  LDO_H_FLOW->CREATE_TEXT( TEXT = LDF_INPUT_RECORDS ).

  LDO_H_FLOW = LDO_HEADER->CREATE_FLOW( ROW = 3  COLUMN = 1 ).
  LDO_H_FLOW->CREATE_TEXT( TEXT = 'Output records' ).
  LDO_H_FLOW = LDO_HEADER->CREATE_FLOW( ROW = 3  COLUMN = 2 ).
  LDO_H_FLOW->CREATE_TEXT( TEXT = LINES( LDT_DATA ) ).

  LDO_H_FLOW = LDO_HEADER->CREATE_FLOW( ROW = 4  COLUMN = 1 ).
  LDO_H_FLOW->CREATE_TEXT( TEXT = 'Timestamp of start' ).
  LDO_H_FLOW = LDO_HEADER->CREATE_FLOW( ROW = 4  COLUMN = 2 ).
  DATA LDF_UTC_START TYPE CHAR30.
  WRITE LDF_TIMESTAMP_START TIME ZONE 'UTC' TO LDF_UTC_START.
  LDO_H_FLOW->CREATE_TEXT( TEXT = LDF_UTC_START ).

  LDO_H_FLOW = LDO_HEADER->CREATE_FLOW( ROW = 5  COLUMN = 1 ).
  LDO_H_FLOW->CREATE_TEXT( TEXT = 'Timestamp of end' ).
  LDO_H_FLOW = LDO_HEADER->CREATE_FLOW( ROW = 5  COLUMN = 2 ).
  DATA LDF_UTC_END TYPE CHAR30.
  WRITE LDF_TIMESTAMP_END TIME ZONE 'UTC' TO LDF_UTC_END.
  LDO_H_FLOW->CREATE_TEXT( TEXT = LDF_UTC_END ).

  LDO_ALV->SET_TOP_OF_LIST( LDO_HEADER ).
  LDO_ALV->SET_TOP_OF_LIST_PRINT( LDO_HEADER ).

  LDO_ALV->GET_FUNCTIONS( )->SET_ALL( ).
  LDO_ALV->GET_COLUMNS( )->SET_OPTIMIZE( ).
  LDO_ALV->GET_SELECTIONS( )->SET_SELECTION_MODE( EXPORTING VALUE = IF_SALV_C_SELECTION_MODE=>CELL ).
  LDO_ALV->DISPLAY( ).

  POF_SUBRC = 0.
ENDFORM.

キーワード
検索キーワード
ABAP
ABAP 7.52
New Open SQL
ABAP SQL
SAP HANA
Code to Data
Code Pushdown
SAP S/4HANA
WITH句
集合関数
SUM()
GROUP BY句
JOIN
INNER JOIN
OUTER JOIN
LEFT OUTER JOIN
不等号結合
自己結合
HAVING句
ORDER BY句
CDS view
ABAP CDS view
HANA infomation view



さて本題です。(笑)
今更ですが、感激です。
Vocal : Stevie Wonder
映画 : 蒲田行進曲に出てくる、高見知佳お気に入り!!レジェンド : スティービー・ワンダーです!!
Guiter : Nile Rodgers
Diana Ross/i'm coming out, Diana Ross/Upside down, Madona/Like a Virgin, ...ですよ!!この人一体何枚レコードを売ったのでしょうか?なにより、ファッショナブルで胡散臭いのが好きです。ニューヨークジャズ仕込みのギターテクニックも地味に凄いです。
Drum : Omar Hakim
ウェザー・リポート, マドンナ, スティング, デヴィッド・ボウイ...エレキにも明るくて、ゲロテクです!なにより、プレイ中の表情が好きです。
Bass : Nathan East
Fourplayのベースが一番好きですが、今回は地味に屋台骨を支えています。歌ってないけれど...
このステージメンバーのグラミー受賞数合計は延べ50いくのではと思います。

ファレル ウィリアムス&ナイル ロジャース&スティービー ワンダー&ダフト パンク GET LUCKY グラミー賞 リハーサル



Nile Rodgersのこの動画最高です。Funny!!

Nile Rodgers on I'm Coming Out
ネタ元はおそらくこれですね。

Diana Ross - I'm Coming Out



Guiter : Nile Rodgers
Drum : Omar Hakim

Incredible drumsolo Omar Hakim with Nile Rodgers, Chic, Paradiso 2005 Amsterdam



Bass : Nathan East
Guiter : Chuck Loebのカッティングギターも最高なのですがこれの感想は次の機会に。病死されてしまったのが悲しい。

FourPlay Java Jazz festival 2011
もう一つ

Harvey Mason: 3RD DEGREE (FOURPLAY: Harvey Mason - Chuck Loeb - Bob James - Nathan East)



参考 : Vocal : Diana Ross
イヤー凄いです。マイケルと踊っています。My babyですよ。

"Upside Down" - Michael Jackson at Diana Ross Concert (1980)
JKと踊っています。リスペクトされているんでしょう。

Jamiroquai sings Upside Down with Diana Ross 1997



大人が本気を出すと凄いなぁ~って思います。

ヘッドホン:MDR-Z900HD:MDR-Z600 聴き比べました。

気の迷いから気まぐれで気がついたら落札してしまいました。
・MDR-Z600
MDR-Z900HD

っというのは、自身初のヘッドホン、MDR-CD900民生用から、以下の通り基本路線がブレないまま今まで来ているので、変化球が欲しくなりました。SONY製ヘッドホンの系譜の一つである以下をなぞってみたいというのもありました。この中で、MDR-CD999、MDR-Z900は手に入らなかったので、それ以外の4機種を聴き比べしてみました。あと、MDR-Z600もですね。だから5機種になります。
・MDR-CD900民生用
MDR-CD900stネオジウム
・MDR-Z1000
・MDR-Z600
MDR-Z900HD


・MDR-CD900民生用
いまだにバランスが絶妙です。これ以前に広帯域のヘッドホンはほとんど無かったので、奇跡のバランスなのではと思っています。低域の量感、中域の控え目感、高域の刺さらないギリギリな感じ、別途自身のブームの自動音場補正したスピーカの音と比較しても大きな違和感は無いです。

MDR-CD900stネオジウム
いわゆる国内標準機ですね。高域は若干刺さりますが私は気になりません。ハイハットシンバルの音が好きなのでむしろ良いかもと思います。中域の控え目感も丁度良い感じです。いろいろ話題になる低域ですが「正しい装着」をすると低域の量感は誤差の範囲内ですが僅かに多いか位で丁度良いと思います。この「正しい装着」が曲者でイヤーパッド内に外耳を押し込むのが正解だそうです。(多分)

・MDR-Z1000
10年近く前に初めて聞いたときは高域不足に感じましたが、今聞くと丁度良いと思います。あと高域がシルキータッチというかきめ細かく感じます。実はここ最近のヘビロテでして室内屋外問わず稼働率が高かったりします。

・MDR-Z600
他のヘッドホンと比較してクラスが下がるので仕方がないことなのですが、低域高域共にナローレンジに感じます。しかし大雑把に帯域バランスは取れていると思います。他の方のレビューにもいろいろ書かれていますが良い製品だと思います。

MDR-Z900HD
実はこの機種が今回のテーマです。少し調べると賛否ハッキリ分かれています。つまり確かな情報に乏しい。当初低音が出てない玉を引いたようで比較的大音量で24時間エージングしてみました。
スペックでは80kHzまで伸びているので、ハイレゾ対応のハシリだと思います。ハイレゾかどうかは不明ですが確かにサ行やハイハットの16-20kHzがきちんと聴こえます。しかしながら違和感有りなんです。
そこでDEQ2496のパラメトリックイコライザーで調べてみると2-8kHzが出すぎなんです。-6dBくらいするとバランスが良くなります。中高域の解像度感はこの辺の帯域なので、ネットの評判とも一致します。
全帯域よく出ていますが2-4kHzに大きなピークがあってバランスが崩れてしまっているというのが私の感想です。おそらくですが、初のHDドライバーということでまだノウハウに乏しく80kHzを達成するのが精一杯だったのではと思います。



小学3年生の息子が、ヘッドホンで音楽鑑賞する事を覚えて、寝る前に音楽聴きたいと、おねだりするようになりました。英才教育として(笑)、義務でMDR-CD900stネオジウムDonald Fagen /I.G.Y.を60秒聴かせてから、好きな曲を数曲聴かせてます。

https://m.youtube.com/watch?v=Ueivjr3f8xg

オーディオ:音場補正(2)

オーディオの音場補正ということで、自身にとっての長年のテーマである「グラフィックイコライザー」を弄っていました。自身はたまたまテレワーク継続中のサラリーマンだったので幸運なことに同居人不在の時にゆっくり試すことができました。
改めて、使用機材は以下の通りです。全体的に古い機材ばかりですが、同居人の厳しい締め付けの都合厳しい状況継続中です。ある意味減っていないので幸運なのかもしれません。
BEHRINGER ( ベリンガー ) DEQ2496 ULTRACURVE PRO マルチプロセッサ

ONKYO A-7VL(S) ステレオ・プリメインアンプ

・自作スピーカ 長岡鉄男氏設計 D-50
FOSTEX FE-206Σ
FOSTEX FT90H(メタライズドポリエステルフィルムコンデンサ直列)

自身の環境での、自動音場補正の結果は以下の通りとなりました。
DEQ2496セッティングメモ
・UTL1 : CHANNEL MODE : DUAL MODE
・I/O1 : SELECT INPUT : DIG. IN
・I/O2 : NOISE SHAPER : OFF
・I/O3 : SELECT RTA INPUT : RTA/MIC
リビングに設置しているので部屋を含めた左右のバランスは酷いのですが、スピーカ固有の特性も反映していて、予測していた以上に左右のズレは少なく感じました。
Left
f:id:dai_h_73:20200711102644j:plain
Right
f:id:dai_h_73:20200711102730j:plain

前回ブログに書きましたが、音質は、高音が刺さります。あと、ローエンドは40hz位まではフラットになりました。
音場補正後の状態で音楽鑑賞しながら考えを巡らせていたら思い出しました。音質に配慮した高価な機材を使用した屋外のイベント会場の音質に酷似していることに気づきました。例えば東京ディズニーランドのパレードBGMのような感じです。
定位が改善しました。これは説明がつくのですが、楽器の音程が上下することによる周波数の変化に対して、左右の信号強度が常に一定に揃っているので、倍音成分を含めて一定の場所をキープし続けるのだと思います。一方で視聴位置がセンターから外れると、左右の音量差が敏感に感じられました。つまり、自動音場補正で立てたマイクロホンの位置から少しでも外れると、ステレオイメージが大きく湾曲されてしまいました。補正無しだとゆるゆるな状態なのでアバウトにステレオイメージが広がっているのですが、音場補正すると、カメラでいうところの、ハイスピードレンズ開放が薄皮のようなピント範囲を形成するような感じでしょうか。決まれば最高なのですが、決まりにくいので扱いづらい感じになりました。同居人不在の時に条件を整えてこっそり至福の時を楽しむ感じになりました。



最近は、Jeff Loberが好きで、Jazz Fuk SoulのAdrenalineヘビロテです。
偶然知ったのですがこの曲所謂「やってみた動画」がかなりあるようです。学生の時にドラムを担当していたのですが、やってみた動画のようにプレイできたら楽しいだろうなと思います。また、この曲の難易度の高さに驚いています。
オリジナル

Jazz Funk Soul _ Adrenaline (feat. Jeff Lorber, Chuck Loeb & Everette Harp)

プロもコピーしています。何をしているのか良く分かります。これほどまで難易度が高いと思いませんでした。

Jazz Funk Soul - Adrenaline Drum Cover by Kevin Dwi

やってみた - 子供までが既にプロの域だと思います。凄いです。
何故、この曲をセレクトしたのか?経緯も気になります。

Jazz Funk Soul - Adrenaline Drum Cover

追記です。後でこの曲のドラムパートを調べたら、Gary Novakでした。道理で難易度高いはずと納得しました。それと、本家はさすがに凄まじいと感じます。https://m.youtube.com/watch?v=V72RC9_VU28

以上

オーディオ:音場補正

音場補正ネタですね。

一旦は、PCベースで自動音場補正を試みようと思ったのですが、誘惑に負けました。
BEHRINGER ( ベリンガー ) >DEQ2496 ULTRACURVE PRO マルチプロセッサー 送料無料 | サウンドハウス
買っちゃいました。っといっても、いつものオークションで中古を安価に。オークションを続けていると安価に入札する技術が身についてくるようで、同出品が4台あったのですが各々の終了時刻からアクセルを踏むタイミングを見計らって、他の出品を落札するよりも10%以上安価に落札できました。
いろいろ調べると、2496で入力すること等々書かれていましたが、ライトに動かそうということで、以下の通りとしました。音量調節を最終段で行っているので、16bitとはいえカジュアルに聴く分には深刻なビット落ちは無いと思います。あと、副産物としてイコライジングした結果ピークを越えてしまったときは、iPhoneの音量を下げれば解決します。あ~なんともイージーだ。

iPhoneのストリーミング(Spotify)→Bluetooth
https://www.amazon.co.jp/dp/B07R5Z822Q→SPDIF出力(44.1k16bit)
DEQ2496→SPDIF出力(44.1k16bit)
https://www.amazon.co.jp/dp/B004PIPKGC→音量調節をして
長岡鉄男 D-50バックロードホーン FOSTEX FE-206Σ FOSTEX FT-90A

f:id:dai_h_73:20200615124212j:plain

この機械、非常に多機能で最初は操作に戸惑いましたが、1時間位いじくっていると操作のルールが分かってきて、大体のことは出来るようになりました。あとは、サウンドハウスの製品ページにある使い方ビデオを見れば大丈夫でした。そして、動作確認目的で自動音場補正(Auto EQ)やってみました。35年前にADC SX-525XでAuto EQを動かしたことを思い出して、懐かしかったです。当時と違うのは、プリメインアンプまですべての過程がディジタル処理で行われること、ファンタム電源によるコンデンサーマイクロホンを使っていること、ローからハイまできちんと出力できるスピーカを使っていること、です。そのため、当時は動かすまでに大音量のピンクノイズがばらまかれて、生きた心地がしないまま失敗を重ねて、動かしきったときには油汗びっしょりでしたが、今回は35年ぶりとはいえ2回目だし、ピンクノイズは大音量を解き放つ必要があることを経験値として知っていたので、びっくりするほどスムーズにAuto EQ動かせました。当時の苦労はなんだったんだろう??!

補正結果は改めて載せようと思いますが、ライトにAuto EQを動かしたところ、高域はFOSTEX FT-90Aがきちんと効いていて、20kHzまで補正範囲内に収まっていました。低域はオペレーションミスでAuto EQが行われなかったのですが、300Hz以上は補正の範囲内に収まっていました。つまり300-20kまで大体フラットに出来ていたようです。そして、補正後の音を聞いてみると、300Hz以下がどうなっているのか不明ですが、ちょっと高域出すぎじゃないかなって思いました。もしかしたら、マイクロホンがIK Multimediadaだったからかもしれませんが、BEHRINGER ( ベリンガー ) >ECM8000 測定用コンデンサーマイク 送料無料 | サウンドハウスは特性にばらつきがあるという噂だし、本当のところは不明です。一方普段、MDR-Z1000、MDR-CD900st等々を聴いていてそんな風に感じるので、フラットって大変だなぁ~(謎)って思いました。

こんな感じに、目をサンカクにして聴こうと思えばコーディックやアップサンプリング等々あると思いますが、自宅スピーカでイージーにフラットレスポンスで音楽を楽しむ分には十分だと思います。

で、本題のヘッドホンの音場補正(こちらは手動です)ですが、自宅でピーピー正弦波を出力できるわけはなく、カラオケボックスの利用を考えていますが、なんかPCを持ち歩くよりもDEQ2496を持ち歩いたほうが楽な気がしてきました。この機械、2.1kgしかないんです。PC、Audio I/Fを持ち歩くことを考えると、セットアップの簡略さ加減も含めてDEQ2496が楽に感じました。そうするとテストトーンをどうするか?ファイルを作成してiPhoneで再生させるかなぁ~。

DEQ249の使いこなしについてですが、以下サイトが非常に参考になります。
index
...ですが、ここに書かれていることを全て実施しようと思うと、カジュアルではなくなっちう。同居人の許可が取れればやってみたいけれど、難しいかなぁ~。

こちらも参考になります。
DEQ2496 digital equalizer
高額な機器と組み合わせた時の挙動が書かれているので、なんとなく安心できます。アナログソースも一旦ディジタルに変換して出力するという話は30年前に聞いたことがあって、当時はなに馬鹿なこと言っているんだろうと思いましたが、このサイトのように積極的に加工するのであれば最もだと思います。そして、音楽ソースは音場補正した環境で聴くことでより良くなると力説されているので、(自身、高級な耳を持ってないので)安心できます。20年位前に金満になったらフルディジタルネットワークでJBL 4344のバイアンプ駆動とか妄想していたので、憧れます。

故障については、こちらが参考になります。
DEQ2496初期画面にならない不具合修理:低予算オーディオ記2:SSブログ
なにかあったら、電源周りのコンデンサを交換するんですね。とりあえずは熱い場所に置かないように気を付けて、起動できなくなったらコンデンサを交換してみようと思います。

以下駄文です。
最近というか20年前から思うのは、各種オーディオ雑誌に記事を書いている評論家たちは、実は文章のプロで機材についてはシロウト?って思わざるを得なくて軽い怒りを感じます。カメラ雑誌の記事についても同様の軽い怒りを感じます。ターニングポイントとしてPCが果たした影響が大きいと思います。USBケーブルで音が変わるとか阿保らしくて阿保らしくて、ビットパーフェクトなのに違いがあるの?スポンサーとの付き合いとかしがらみまみれなんだろうけれど、食べていくのに必死なんだろうけれど、ユーザを馬鹿にするのもいい加減にしてほしい。高音質NASとか馬鹿げていると思う。CDトランスポートもエラー補正が...とか語るけれど、\100のジャンクCD-ROMドライブで、WAVファイル取り込みを複数回実施してファイル比較すると、何回行っても結果は一緒。だから、ビット落ちしないようにディジタルで加工して、最終段のD/A変換以降を気を遣うことで、95点とれると思うのです。

ヘッドホン:音場補正(準備)

ヘッドホンというか、ホームオーディオネタになりつつありますが、以前ヘッドホン:DACなど - dai_h_73’s diaryで音場補正ネタを少し書きました。そして、ヘッドホンを音場比較法で測定するための機材を、オークション等で少しずつ入手しています。というか、プロでは無いし、学会に発表するわけでもないので、おおざっぱな機材ですが、一旦揃いました。
・IK multimedia ARC SYSTEM 2Amazon.co.jp: IK multimedia ARC SYSTEM 2 並行輸入品: 楽器
  →無償アップグレード 2.5とのことで、無事にライセンス譲渡してもらいました。
Roland EDIROL UA-5
  →落札してからWindows10非対応を知り焦りましたが、いろいろネット検索で探してWindows10 64bitでASIOドライバを動作させました。
・XLR-XLRマイクケーブルCLASSIC PRO ( クラシックプロ ) >MIX050 マイクケーブル 5m XLRキャノン | サウンドハウス
  →おそらく部屋中を歩き回るので少し長めの5mにしました。また将来ステレオ録音するかもしれないので2本購入しました。
残りモニタースピーカ、アンプは以下手持ちを使おうと思います。
・LXA-OT1ラックスマン製 デジタルアンプ LXA-OT1
TANNOY CPA-5TANNOY CPA-5の仕様 タンノイ

これらと、ノートPCをカバンに詰めて、カラオケボックスへ行って2時間くらいかな?籠って、黙々と正弦波を聞きながら音量調節をして(音場比較法)測定する予定です。

っとここまで書きましたが、スピーカの音場補正のツールとして、後からこんなのを見つけてしまいました。
BEHRINGER ( ベリンガー ) >DEQ2496 送料無料 | サウンドハウス
BEHRINGER ( ベリンガー ) >ECM8000 Measurement Condenser Mic 測定用コンデンサーマイク 送料無料 | サウンドハウス

こんなのも見つけてしまいました。https://www.soundhouse.co.jp/products/detail/item/262172/

今から思えば、こちらのほうが楽ちんだったかなと思いましたが、マイクロホンの精度にばらつきがあるようです。理想的には校正済みのB&Kなんでしょうが2桁くらい値段が変わってくるようです。ちなみに、IK multimedia ARC SYSTEM 2付属のコンデンサーマイクですが、1.2inchのB&Kマイクロホンに似ていました。(ねじ込みでついているマイクユニットの先っぽ)

学生の時は、B&Kのマイクロホンを扱っていても緊張しなかったのに、自身のIK multimediaのマイクロホンを扱うのはファンタム電源48Vは初めてだったので緊張します。壊したら追加出費になると思うと気持ちが引き締まります。実は、IK multimedia測定用マイクロホンを、UA-5につないでテストしたのですが、最初はうまく動いていたのに、途中からハムノイズしか聞こえなくなって、壊れたのかと脂汗が流れました。この手のマイクロホンは接触不良が起きやすいようで、各部を抜き差しして安定して動くようになりました。そういえば学生の時もB&Kのマイクロホンが安定しなかったことを思い出しました。同じ原因かと25年ぶりに思いました。



最近は、JLFばかり聴いています。
https://m.youtube.com/watch?v=T4Aa5p1EpN0&list=OLAK5uy_nzTLMaQBI8EbGfrVS2nwm_G5tWKwABf-k&index=9

ヘッドホン:MDR-CD900stの低音不足問題

CD900stってさ~モニター系の代表格だからさ~に続くのは?
・中高域寄りだよね~。
・低音は量感無いけどタイトで引き締まっているよね~。
・プロはヒスノイズを聞き分けなければいけないから低音は要らないんだよ。

恥ずかしながら、自身は「フラットな音」を一度も聴いたことがありません。もしかしたらレコーディングサイドで、「ありふれた再生環境」で気持ちよく聞こえるように積極的に加工しているから、フラットな音で聴くことは無意味かもしれません。SM57や、ノイマン、NT1等々、フラットでは無いし。ミキシング過程で如何様にもなるし。しかしながら、自身を含めてマニアは、「フラットな音」「無色透明」「混ざり気の無いストレートな音」を求めてさまよい、ハイレゾやクライオジェニックに多額のお金をつぎ込んでしまうのでしょう。いつも通り話がそれました。

イヤホンの場合顕著だと思うのですが、イヤーピースの装着状態、イヤーピースの種類によって、低音の量感が大きく変わると思います。例えば、耳から外れかけたイヤホンの音は、シャカシャカして低音の量感がほとんど無いと思います。オーバーイヤーヘッドホンでも、装着状態からヘッドホンユニットを耳に強く押し当ててみると、低音の量感が増えると思います。ヘッドホンの振動板と鼓膜の距離が短くなると低音量感が増えるのではと思います。

前置きはこのくらいにして、MDR-CD900st、薄めのイヤーパッドで隙間ができないように慎重に装着すると、低音の量感が十分出ると思います。っというのは、以前自身のブログでヘッドホン:MDR-CD900ST:アラウンドイヤー化 - dai_h_73’s diaryを書きましたが、MDR-M1st純正イヤーパッドに、シリコン角ゴムを埋め込んでから、振動板と鼓膜の距離が明らかに短くなり、CD900st低音量感十分だよって思えたからです。また、MDR-Z1000とATH-W1100のイヤパッドの組み合わせだと、振動板と鼓膜の距離が長くなってしまい、低音量感が減ったと感じます。

またまた、「フラットな音」に話はそれますが、新コロがひと段落したら、自身の大学卒業論文のテーマでもあった「ヘッドホンの音場比較法による周波数特性の測定」をしてみようと思っています。(現在機材確保中です)測定は以下のプロセスを行います。
・70dB一定の音場作成します。在学中と違って、B&Kのマイクロホンシステムは無いし、無響室も無いので、カラオケボックスAmazon | IK Multimedia ARC System 3 通常版 - 音場補正システム【国内正規品】 | 楽器・音響機器 | 楽器を使って、イージーに作成しようと思います。
Amazon | EarStudio ES100 MK2 24bitポータブル高解像度Bluetoothレシーバ/ヘッドフォンアンプ/DAC、AAC、aptX、aptX HD 黒 | EarStudio | ヘッドホンアンプのアプリが10バンドなので、これに合わせたテストトーンを使おうと思います。在学中と違ってHPのトーンジェネレータは無いので、予め周波数毎に正弦波のWAVファイルを準備しようと思います。
・テストトーン10バンド毎にスピーカとヘッドホン交互に聞いて、EarStudio ES100アプリのグライコを調節して、同じ音量になるように調節します。
・出来上がったグライコカーブをプリセットします。
当ブログで、設定を公開していこうと思いますが、あくまでも自身の耳の形状に依存する周波数特性なので、一般に適用できるかどうかは不明です。
学生当時、他のゼミ生達で測定したところ、余裕で6dBくらいの誤差はありました。傾向は似たようなカーブでしたが。

大好きなブライアンの新譜が出たばかりのようです。相変わらず気持ち良いです。
www.brianculbertson.com

ちなみに、ブライアンは、MDR-7506を使っているようです。こればかりは、音場補正せずにMDR-7506で聴くのがフラット?なのかな?
www.youtube.com


MDR-CD900st
MDR-M1st
MDR-7506

ヘッドホン:EarStudio ES100 MK2 ワイヤレスバランス

Bluetoothレシーバ:EarStudio ES100 MK2
https://www.amazon.co.jp/dp/B078H4YD2L
いろいろ面白いです。
ワイヤレス接続なのに、バランス接続のA&K互換2.5mm 4極ジャックが付いているのです。

以下、様々なヘッドホンをバランス化して来ました。
AKG K550
AKG K701
SONY MDR-7506 サマリウムコバルト
SONY MDR-CD900 民生用
SONY MDR-CD900 業務用
SONY MDR-CD900st ネオジム
SONY MDR-Z600
SONY MDR-Z1000

そして、ワイヤレス環境であっても、これらのヘッドホンの潜在的なパフォーマンスを解放してあげなければっと思いました。
しかしこんなもの、まず需要が期待できないので、市販はありえないよね。
老眼鏡をかけること30分間、、DIYしました。

「MDR-1A互換3.5mm4極プラグ - A&K互換2.5mm4極プラグアダプタ」
f:id:dai_h_73:20200515011341j:plain

得意の空中配線、ちなみに配線材は、MDR-CD900stで余った信号線、白、赤、黒を3cmくらいずつ使いました。きっとスタジオの音を奏でるでしょう(笑)
今更、左右セパレーションが...定位がシャープに...とかグダグダ書きません。屋外であっても、「スマートにバランス駆動」良く分からないけれど、ムフフな気持ちになれます。

昔々、Windows98の時代に、日本IBMが当時としては珍しいWi-Fiチップを内蔵したノートPCを発売して、インターネットショウ in 秋葉原 '99でコンパニオンのキレイどころが、「ワイヤレスインターネット」を連呼していたのを思い出しました。今では当たり前ですね。あと数年もすると、「ワイヤレスバランス」の時代が来るに違いないです。(こねーか)
だけれども、完全ワイヤレスイヤホンは、バランス駆動こそしてないけれど、グランドは完全分離しているのでセパレーションは良好なんだろうなぁって思います。オーバーイヤーヘッドホンでも、完全ワイヤレスイヤホンのように左右分けたら、おそらくセパレーションがよくなるんだろうなぁって思います。ただねぇ~ヘッドホンに充電ケーブル2本差すのは、正気の沙汰とは思えない。「意味わかんないっ」(女子高校生風)っていうのが、正常な人間の反応だと思います。

f:id:dai_h_73:20200515011810j:plain
ワイヤレスバランスのMDR-Z1000

キーワード:
EarStudio ES100
EarStudio ES100 MK2
Bluetooth
ワイヤレス
バランス化
バランス駆動
グランド分離
グランド分離配線