Translate

2019年10月2日水曜日

◆Windowsパソコンで、Netflixを観る時に、Windows Sonic for HeadphonesやDolby Atmos for Headphonesをオンにする理由:「Amaze」トレーラーの録音データの分析から:Reasons to turn on Windows Sonic

 Dolby Atmosは、オブジェクトベースの立体音響(Spatial Audio)の技術です。
 
 Windows10のパソコンで、Windows Sonic for HeadphonesやDolby Atmos for  Headphonesをオンにすると、Dolby AtmosやDolby Digital Plusなどのサラウンドサウンドを普通のヘッドホンで楽しむことができるようになります。



 Windows Sonic for HeadphonesやDolby Atmos for Headphonesをオンにすると、音響空間が広くなった感じがしたり、迫力ある重低音を聴くことができたりします。

◆Windows Sonic for HeadphonesやDolby Atmos for Headphonesをオンにした場合の音響効果の視覚化


 音響の効果をことばで説明するのは難しく、そもそも音声の聴こえ方は個人差があり、抽象的で主観的な評価になってしまいます。

 そこで、Windows Sonic for HeadphonesやDolby Atmos for Headphonesの効果を具体的、客観的に示すために録音データの分析を行いました。

 Dolby Atmosのデモトレーラーの音声をWindows Sonic for HeadphonesやDolby Atmos for Headphonesをオンにして録音したデータと、オフにして録音したデータの波形などの特徴を比べてみました。

dolby-atmos-trailer_amaze_1080.mp4

 Dolby Atmosのデモトレーラー「dolby-atmos-trailer_amaze_1080.mp4」の動画は、ドルビー社のサイトからダウンロードできます。

 「Amaze」は約1分の動画で、いろいろな森の音や雷鳴、雨音などの自然の音が入っています。

 米国のアマゾン・プライム・ビデオにもこのトレーラーがありました。現在は利用できなくなっていますが、ページは残っていました。ヘッドホンで聴くようにとのことです。

「The "Amaze" clip is a demonstration of the multidimensional audio experience in Dolby Atmos. Put your headphones on to experience it.」

 Dolby Atmosのオブジェクトベース形式の音源を再生できる動画再生アプリはほとんどないので、一般的な動画再生アプリで再生して、ヘッドホンで聴いた時に「Dolby Atmosらしく聴こえる」ように構成されているのだと思います。

 VLCメディアプレーヤーで「Amaze」を再生し、その音声をAudacityで録音しました。

 VLCメディアプレーヤーでは、「Amaze」のコーデック情報が「3F2M/LFE(3つのフロントスピーカー、2つのミドルスピーカー、サブウーファー)」という表示なので、「Amaze」の音声は、5.1chの音声として作成されているようです。

 下の録音データの波形図から、Windows Sonic for HeadphonesやDolby Atmos for  Headphonesをオンにした場合の効果がわかると思います。

 図3a,bは、Windows Sonic for Headphones、Dolby Atmos for Headphonesをオフにして録音したものです。図1、図2と比べて、波形の振れ幅が明らかに小さくなっています。実際に聴いてみても、「オフ」の場合は明らかに迫力に欠ける音声です。

 特に、図2のDolby Atmos for Headphonesの場合は、「雷鳴」や「重低音」の部分の波形がWindows Sonic for Headphonesよりも大きくなっています。トレーラーに「POWERFUL BASS」という表示があるように、再生すると重低音が響いています。耳にダメージを与えないように音量を上げ過ぎないように注意する必要があります。

 なお、図3aと図3bの違いは、VLCメディアプレーヤーのスピーカーモードの設定で「オリジナルモード」に設定した場合(図3a)と「ステレオモード」に設定した場合(図3b)の違いです。「オリジナルモード」の場合は、5.1ch音声を2chステレオで再生していることになり、「ステレオモード」の場合は、5.1ch音声を2ch音声にしたものを2chステレオで再生していることになると思います。つまり、2chステレオで再生する場合は、VLCメディアプレーヤーを「ステレオモード」にした方がよいと思われます。
 実際に聴いてみると、雷鳴の部分などは「ステレオモード」設定での再生の方がよい感じです。

 とりあえず、パソコンで5.1ch音声を利用できるNetflixの映画やドラマは、Windows Sonic for HeadphonesやDolby Atmos for Headphonesをオンにして観るのがよいと思います。
 少なくとも、重低音の迫力は格段に増加します。そして、重低音については、波形の振れ幅からすると、Dolby Atmos for Headphonesの方がパワフルな音声のようです。


波形はWindows Sonic for Headphones
 

図1:Windows Sonic for Headphones


図2:Dolby Atmos for Headphones


図3a:Stereo(オリジナルモード再生)

図3b:Stereo(ステレオモード再生)


◆スペクトル解析結果で見るWindows Sonic for Headphones、Dolby Atmos for Headphonesの「効果」 


次に、「Amaze」トレーラーを5つのシーンに分けて、それぞれのシーンごとに録音ファイルのスペクトル解析の結果を比較しました。横軸が周波数、縦軸が音声のレベルです(下の5つの図)。いずれも、Leftチャンネルの録音データです。

 Windows Sonic for Headphones、Dolby Atmos for Headphonesをオンにして録音した場合は、オフの場合よりも音声レベルが全体的に高水準になっています。なお、「オフ」の場合の録音は、上の図3bの「ステレオモード」再生設定での録音です。

 Windows Sonic for Headphones、Dolby Atmos for Headphonesの「オン」と「オフ」を比べると、特に、雷鳴や雨音でかなり差が大きくなっています。

 実際に聴き比べてみても、森の中の音や雷鳴、雨音などはかなり違いのある音声になっています。特に、「雷鳴」は全く異なる音だと言えると思いますが、そのことがスペクトル解析の結果でも確認することができました。

 Netflixで5.1ch音声の映画やドラマを観る時には、Windows Sonic for HeadphonesやDolby Atmos for Headphonesをオンにしないと、とてももったいないと思います。

 Windows10のパソコンでは、「Netflixアプリ」を利用し、Windows Sonic for HeadphonesやDolby Atmos for Headphonesをオンにして視聴するのが正解でしょう。

 なお、Windows Sonic for Headphones、Dolby Atmos for Headphonesをオンにした場合のスペクトル解析の結果に凹凸が多いのは、頭部伝達関数(HRTF)を利用した音声処理をしているからだと考えられます。
 
 では、Windows Sonic for HeadphonesとDolby Atmos for Headphonesのどちらがいいのかは、よくわかりません。可聴音域(20Hz~20kHz)ではWindows Sonic for Headphonesの音声レベルの方が高くなっているようです。

 

 
オープニング


森の音、虫の羽音や鳥が羽ばたく音など


雷鳴の音、雨が降り始める


強くなる雨の音


エンディング

☆関連記事

◆やっぱり、Windowsパソコンで、Netflixを観る時に、Windows Sonic for HeadphonesやDolby Atmos for Headphonesをオンにする理由:「Amaze」トレーラーの録音データの分析から(その2)




-----------------------------------------------------------------
------------------------------------------------------------------


<付録:「Rコード」の例> 

 音声データの「R」での分析コードは、ネット上であまり見かけないので、自己流の拙いものですが、備忘録として記しておきます。「テストトーン」の分析用のコードをベースにしています。
 最も注意を要したのは、「コード」以前に、録音データの尺をできるだけそろえることでした。冒頭の不要な無音部分を手動でカットしたので、尺が合うようにするのに留意しました。

------------------------------------------------------------------

library("soundgen")
library(seewave)
library(tuneR)
library(ggplot2)
library(tidyr)
library(dplyr)
library(plyr)
library(data.table)

sctrans <- data.frame(Scene = c(1, 2, 3, 4, 5), SCNAME = c("Opening", "Woods", "Thunder", "Rain", "Ending"))


wdat <- readWave("amaze_winsonic.wav")

wdatL<-channel(wdat,"left")
wdatR<-channel(wdat,"right")

amaL1<-cutw(wdatL,from=0,to=11.5)
amaL2<-cutw(wdatL,from=11.5,to=24)
amaL3<-cutw(wdatL,from=24,to=39)
amaL4<-cutw(wdatL,from=39,to=47)
amaL5<-cutw(wdatL,from=47,to=58.5)

amaR1<-cutw(wdatR,from=0,to=11.5)
amaR2<-cutw(wdatR,from=11.5,to=24)
amaR3<-cutw(wdatR,from=24,to=39)
amaR4<-cutw(wdatR,from=39,to=47)
amaR5<-cutw(wdatR,from=47,to=58.5)

df_lr <- NULL
i = 0

for(i in 1:5){

amal <- get(paste("amaL",i,sep=""))
amaR <- get(paste("amaR",i,sep=""))

 d_l <- meanspec(amal, f = 48000,norm=FALSE,correction = "energy", flim = c(0, 20), col="blue")
 colnames(d_l) <- c("Frequency", "Left")

 d_r <- meanspec(amaR, f = 48000,norm=FALSE,correction = "energy", flim = c(0, 20), col="red")
 colnames(d_r) <- c("Frequency1", "Right")

 d_lr <- cbind(d_l,d_r)
 d_lr <- as.data.frame(d_lr)
 d_lr$Scene <- as.integer(i)

 d_lr$Sound_File <- as.character("WinSonic")

 df_lr <- rbind(df_lr,d_lr)
}

tail(df_lr)
df_lr

wdf_lr <- df_lr


ddat <- readWave("amaze_dolby.wav")

ddatL<-channel(ddat,"left")
ddatR<-channel(ddat,"right")

amaL1<-cutw(ddatL,from=0,to=11.5)
amaL2<-cutw(ddatL,from=11.5,to=24)
amaL3<-cutw(ddatL,from=24,to=39)
amaL4<-cutw(ddatL,from=39,to=47)
amaL5<-cutw(ddatL,from=47,to=58.5)

amaR1<-cutw(ddatR,from=0,to=11.5)
amaR2<-cutw(ddatR,from=11.5,to=24)
amaR3<-cutw(ddatR,from=24,to=39)
amaR4<-cutw(ddatR,from=39,to=47)
amaR5<-cutw(ddatR,from=47,to=58.5)

df_lr <- NULL
i = 0

for(i in 1:5){

amal <- get(paste("amaL",i,sep=""))
amaR <- get(paste("amaR",i,sep=""))

d_l <- meanspec(amal, f = 48000,norm=FALSE,correction = "energy", flim = c(0, 20), col="blue")
colnames(d_l) <- c("Frequency", "Left")

d_r <- meanspec(amaR, f = 48000,norm=FALSE,correction = "energy", flim = c(0, 20), col="red")
colnames(d_r) <- c("Frequency1", "Right")

d_lr <- cbind(d_l,d_r)
d_lr <- as.data.frame(d_lr)
d_lr$Scene <- as.integer(i)
d_lr$Sound_File <- as.character("DolbyAtmos")

df_lr <- rbind(df_lr,d_lr)

}

tail(df_lr)

ddf_lr <- df_lr


sdat <- readWave("amzestmodestereo.wav")
sdatL<-channel(sdat,"left")
sdatR<-channel(sdat,"right")

amaL1<-cutw(sdatL,from=0,to=11.5)
amaL2<-cutw(sdatL,from=11.5,to=24)
amaL3<-cutw(sdatL,from=24,to=39)
amaL4<-cutw(sdatL,from=39,to=47)
amaL5<-cutw(sdatL,from=47,to=58.5)

amaR1<-cutw(sdatR,from=0,to=11.5)
amaR2<-cutw(sdatR,from=11.5,to=24)
amaR3<-cutw(sdatR,from=24,to=39)
amaR4<-cutw(sdatR,from=39,to=47)
amaR5<-cutw(sdatR,from=47,to=58.5)

df_lr <- NULL
i=0

for(i in 1:5){

amal <- get(paste("amaL",i,sep=""))
amaR <- get(paste("amaR",i,sep=""))

d_l <- meanspec(amal,f = 48000,norm=FALSE,correction = "energy", flim = c(0, 20), col="blue")
colnames(d_l) <- c("Frequency", "Left")

d_r <- meanspec(amaR,f = 48000,norm=FALSE,correction = "energy", flim = c(0, 20), col="red")
colnames(d_r) <- c("Frequency1", "Right")

d_lr <- cbind(d_l,d_r)
d_lr <- as.data.frame(d_lr)
d_lr$Scene <- as.integer(i)
d_lr$Sound_File <- as.character("Stereo")

df_lr <- rbind(df_lr,d_lr)

}

tail(df_lr)

sdf_lr <- df_lr


swddf_lr <- rbind(wdf_lr,ddf_lr,sdf_lr)

tail(swddf_lr)


for(i in 1:5){

 td_lr <-select(swddf_lr,Frequency,Left,Right,Sound_File,Scene) %>% 
  filter(Scene == i)

 swddf_lr1 <- join(td_lr,sctrans,by="Scene")
 swddf_lr1$SCNAME <-as.character(swddf_lr1$SCNAME)

g <- ggplot(data = swddf_lr1) +
geom_line(aes(x=Frequency,y=Left,group=Sound_File, colour=Sound_File)) + xlim(0,20) + labs(x="Frequency(kHz)",y="Energy(log2)") + labs(title="Left Speaker") + scale_y_continuous(trans = 'log2')
g1 <-  g + facet_wrap(~SCNAME)
ggsave(file=paste0("aml",i,".png"),plot(g1),dpi = 200, width = 7.2, height = 4.8)
print(g1)

g <- ggplot(data = swddf_lr1) +
geom_line(aes(x=Frequency,y=Right,group=Sound_File, colour=Sound_File)) + xlim(0,20) + labs(x="Frequency(kHz)",y="Energy(log2)") + labs(title="Right Speaker") + scale_y_continuous(trans = 'log2')
g1 <-  g + facet_wrap(~SCNAME)
ggsave(file=paste0("amr",i,".png"),plot(g1),dpi = 200, width = 7.2, height = 4.8)
print(g1)
}


swddf_lrw <- select(swddf_lr,Frequency,Left,Right,Sound_File,Scene) %>% 
  filter(Sound_File == "WinSonic")

for(i in 1:5){
 td_lr <-select(swddf_lr,Frequency,Left,Right,Sound_File,Scene) %>% 
 filter(Scene == i)

 swddf_lrw <- join(td_lr,sctrans,by="Scene")
 swddf_lrw$SCNAME <-as.character(swddf_lrw$SCNAME)

glrw <- ggplot(swddf_lrw, aes(x=Frequency)) + geom_line(aes(y = Left,color="Left"))
glrw <- glrw + geom_line(aes(y = Right,color="Right"))
glrw <- glrw + scale_color_manual(values = c("blue","red"))+ggtitle("WinSonic") + labs(x="Frequency(kHz)",y="Energy") + labs(color = "Channel")+ scale_y_continuous(trans = 'log10') + facet_wrap(~SCNAME)
plot(glrw)

}

-----------------------------------------------------------------

0 件のコメント:

コメントを投稿