Skip to content

Commit 370024d

Browse files
音声のフィルタ処理を追加
1 parent e34e092 commit 370024d

17 files changed

Lines changed: 397 additions & 76 deletions

File tree

dConnectDevicePlugin/dConnectDeviceHost/app/src/main/java/org/deviceconnect/android/deviceplugin/host/activity/recorder/settings/SettingsAudioFragment.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import androidx.preference.Preference;
77

88
import org.deviceconnect.android.deviceplugin.host.R;
9+
import org.deviceconnect.android.deviceplugin.host.activity.fragment.SeekBarDialogPreference;
910
import org.deviceconnect.android.deviceplugin.host.recorder.HostMediaRecorder;
1011

1112
import java.util.ArrayList;
@@ -26,6 +27,7 @@ public void onBindService() {
2627

2728
setPreviewAudioSource(mMediaRecorder.getSettings());
2829
setPreviewSampleRate(mMediaRecorder.getSettings());
30+
setPreviewAudioCoefficient(mMediaRecorder.getSettings());
2931
setInputTypeNumber("preview_audio_bitrate");
3032
setInputTypeNumber("preview_audio_channel");
3133
}
@@ -94,7 +96,20 @@ private void setPreviewSampleRate(HostMediaRecorder.Settings settings) {
9496
}
9597
}
9698

99+
/**
100+
* フィルターの係数用の Preference に値を設定します.
101+
*
102+
* @param settings レコーダ設定
103+
*/
104+
private void setPreviewAudioCoefficient(HostMediaRecorder.Settings settings) {
105+
SeekBarDialogPreference pref = findPreference("preview_audio_coefficient");
106+
if (pref != null) {
107+
pref.setMinValue(0);
108+
pref.setMaxValue(100);
109+
}
110+
}
111+
97112
private final Preference.OnPreferenceChangeListener mOnPreferenceChangeListener = (preference, newValue) -> {
98-
return true;
113+
return mMediaRecorder != null;
99114
};
100115
}

dConnectDevicePlugin/dConnectDeviceHost/app/src/main/java/org/deviceconnect/android/deviceplugin/host/recorder/AbstractBroadcaster.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
import org.deviceconnect.android.deviceplugin.host.recorder.util.MediaProjectionProvider;
1212
import org.deviceconnect.android.libmedia.streaming.audio.AudioQuality;
1313
import org.deviceconnect.android.libmedia.streaming.audio.MicAudioQuality;
14+
import org.deviceconnect.android.libmedia.streaming.audio.filter.HighPassFilter;
15+
import org.deviceconnect.android.libmedia.streaming.audio.filter.LowPassFilter;
1416
import org.deviceconnect.android.libmedia.streaming.gles.EGLSurfaceDrawingThread;
1517
import org.deviceconnect.android.libmedia.streaming.video.VideoQuality;
1618

@@ -147,6 +149,23 @@ public void setAudioQuality(AudioQuality audioQuality) {
147149
audioQuality.setBitRate(settings.getPreviewAudioBitRate());
148150
audioQuality.setUseAEC(settings.isUseAEC());
149151

152+
if (settings.getAudioFilter() != null) {
153+
float coeff = settings.getAudioCoefficient();
154+
switch (settings.getAudioFilter()) {
155+
case LOW_PASS:
156+
audioQuality.setFilter(new LowPassFilter(audioQuality, coeff));
157+
break;
158+
case HIGH_PASS:
159+
audioQuality.setFilter(new HighPassFilter(audioQuality, coeff));
160+
break;
161+
default:
162+
audioQuality.setFilter(null);
163+
break;
164+
}
165+
} else {
166+
audioQuality.setFilter(null);
167+
}
168+
150169
MicAudioQuality quality = (MicAudioQuality) audioQuality;
151170
if (settings.getPreviewAudioSource() == HostMediaRecorder.AudioSource.APP) {
152171
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {

dConnectDevicePlugin/dConnectDeviceHost/app/src/main/java/org/deviceconnect/android/deviceplugin/host/recorder/AbstractPreviewServer.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
import org.deviceconnect.android.deviceplugin.host.recorder.util.MediaProjectionProvider;
1414
import org.deviceconnect.android.libmedia.streaming.audio.AudioQuality;
1515
import org.deviceconnect.android.libmedia.streaming.audio.MicAudioQuality;
16+
import org.deviceconnect.android.libmedia.streaming.audio.filter.HighPassFilter;
17+
import org.deviceconnect.android.libmedia.streaming.audio.filter.LowPassFilter;
1618
import org.deviceconnect.android.libmedia.streaming.gles.EGLSurfaceDrawingThread;
1719
import org.deviceconnect.android.libmedia.streaming.video.VideoQuality;
1820

@@ -243,6 +245,23 @@ public void setAudioQuality(AudioQuality audioQuality) {
243245
audioQuality.setBitRate(settings.getPreviewAudioBitRate());
244246
audioQuality.setUseAEC(settings.isUseAEC());
245247

248+
if (settings.getAudioFilter() != null) {
249+
float coeff = settings.getAudioCoefficient();
250+
switch (settings.getAudioFilter()) {
251+
case LOW_PASS:
252+
audioQuality.setFilter(new LowPassFilter(audioQuality, coeff));
253+
break;
254+
case HIGH_PASS:
255+
audioQuality.setFilter(new HighPassFilter(audioQuality, coeff));
256+
break;
257+
default:
258+
audioQuality.setFilter(null);
259+
break;
260+
}
261+
} else {
262+
audioQuality.setFilter(null);
263+
}
264+
246265
MicAudioQuality quality = (MicAudioQuality) audioQuality;
247266
if (settings.getPreviewAudioSource() == HostMediaRecorder.AudioSource.APP) {
248267
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {

dConnectDevicePlugin/dConnectDeviceHost/app/src/main/java/org/deviceconnect/android/deviceplugin/host/recorder/AbstractRTSPPreviewServer.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@
1212
import org.deviceconnect.android.libmedia.streaming.rtsp.session.video.VideoStream;
1313
import org.deviceconnect.android.libmedia.streaming.video.VideoQuality;
1414

15-
import java.io.IOException;
16-
1715
public abstract class AbstractRTSPPreviewServer extends AbstractPreviewServer {
1816

1917
/**
@@ -156,6 +154,18 @@ private void restartVideoStream() {
156154
}
157155
}
158156

157+
/**
158+
* エンコーダに設定を反映し、再スタートします.
159+
*/
160+
private void restartAudioStream() {
161+
if (mRtspServer != null) {
162+
RtspSession session = mRtspServer.getRtspSession();
163+
if (session != null) {
164+
session.restartAudioStream();
165+
}
166+
}
167+
}
168+
159169
/**
160170
* 映像用の VideoStream を作成します.
161171
*

dConnectDevicePlugin/dConnectDeviceHost/app/src/main/java/org/deviceconnect/android/deviceplugin/host/recorder/AbstractSRTPreviewServer.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,18 @@ private void restartVideoEncoder() {
161161
}
162162
}
163163

164+
/**
165+
* エンコーダの設定を反映して、再スタートします.
166+
*/
167+
private void restartAudioEncoder() {
168+
if (mSRTServer != null) {
169+
SRTSession session = mSRTServer.getSRTSession();
170+
if (session != null) {
171+
session.restartAudioEncoder();
172+
}
173+
}
174+
}
175+
164176
/**
165177
* SRT 用の映像エンコーダを作成します.
166178
*

dConnectDevicePlugin/dConnectDeviceHost/app/src/main/java/org/deviceconnect/android/deviceplugin/host/recorder/HostMediaRecorder.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,30 @@ public int getLevel() {
337337
}
338338
}
339339

340+
enum AudioFilter {
341+
LOW_PASS("low-pass"),
342+
HIGH_PASS("high-pass");
343+
344+
private final String mName;
345+
346+
AudioFilter(String name) {
347+
mName = name;
348+
}
349+
350+
public String getName() {
351+
return mName;
352+
}
353+
354+
public static AudioFilter nameOf(String name) {
355+
for (AudioFilter filter : values()) {
356+
if (filter.mName.equalsIgnoreCase(name)) {
357+
return filter;
358+
}
359+
}
360+
return null;
361+
}
362+
}
363+
340364
/**
341365
* MediaRecorder の状態.
342366
*/
@@ -1605,6 +1629,26 @@ public void setMute(boolean mute) {
16051629
mPref.put("preview_audio_mute", mute);
16061630
}
16071631

1632+
public AudioFilter getAudioFilter() {
1633+
return AudioFilter.nameOf(mPref.getString("preview_audio_filter", "none"));
1634+
}
1635+
1636+
public void setAudioFilter(AudioFilter filter) {
1637+
if (filter == null) {
1638+
mPref.remove("preview_audio_filter");
1639+
} else {
1640+
mPref.put("preview_audio_filter", filter.mName);
1641+
}
1642+
}
1643+
1644+
public float getAudioCoefficient() {
1645+
return mPref.getInteger("preview_audio_coefficient", 10) / 100.0f;
1646+
}
1647+
1648+
public void setAudioCoefficient(float coefficient) {
1649+
mPref.put("preview_audio_coefficient", (int) (coefficient * 100));
1650+
}
1651+
16081652
public boolean isSupportedAudioSource(AudioSource source) {
16091653
List<AudioSource> sourceList = getSupportedAudioSource();
16101654
if (sourceList != null) {

dConnectDevicePlugin/dConnectDeviceHost/app/src/main/res/values-ja/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,8 @@
120120
<string name="host_recorder_settings_audio_bitrate">ビットレート (bps)</string>
121121
<string name="host_recorder_settings_audio_sampling_rate">サンプリングレート</string>
122122
<string name="host_recorder_settings_audio_source">音声入力</string>
123+
<string name="host_recorder_settings_audio_filter">フィルタ</string>
124+
<string name="host_recorder_settings_audio_coefficient">係数</string>
123125
<string name="host_recorder_settings_audio_channel">チャンネル</string>
124126
<string name="host_recorder_settings_audio_mute">ミュート</string>
125127
<string name="host_recorder_settings_audio_mute_summary">ミュートの設定を行います。</string>

dConnectDevicePlugin/dConnectDeviceHost/app/src/main/res/values/arrays.xml

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,8 +239,20 @@
239239
<item>app</item>
240240
</string-array>
241241

242+
<string-array name="audio_filter_names">
243+
<item>None</item>
244+
<item>Low-Pass</item>
245+
<item>High-Pass</item>
246+
</string-array>
247+
248+
<string-array name="audio_filter_values">
249+
<item>none</item>
250+
<item>low-pass</item>
251+
<item>high-pass</item>
252+
</string-array>
253+
242254
<string name="settings_audio_bit_rate">64</string>
243-
<string name="settings_audio_sampling_rate">8000</string>
255+
<string name="settings_audio_sampling_rate">44100</string>
244256
<string-array name="settings_audio_sampling_rates">
245257
<item>96000</item>
246258
<item>88200</item>

dConnectDevicePlugin/dConnectDeviceHost/app/src/main/res/values/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,8 @@
117117
<string name="host_recorder_settings_audio_bitrate">Bitrate (bps)</string>
118118
<string name="host_recorder_settings_audio_sampling_rate">Sampling Rate</string>
119119
<string name="host_recorder_settings_audio_source">Audio Source</string>
120+
<string name="host_recorder_settings_audio_filter">Filter</string>
121+
<string name="host_recorder_settings_audio_coefficient">Coefficient</string>
120122
<string name="host_recorder_settings_audio_channel">Channel</string>
121123
<string name="host_recorder_settings_audio_mute">Mute</string>
122124
<string name="host_recorder_settings_audio_mute_summary">Set the mute.</string>

dConnectDevicePlugin/dConnectDeviceHost/app/src/main/res/xml/settings_host_recorder_audio.xml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,22 @@
5454
android:title="@string/host_recorder_settings_audio_echo_canceler"
5555
app:iconSpaceReserved="false" />
5656

57+
<ListPreference
58+
android:defaultValue="none"
59+
android:entries="@array/audio_filter_names"
60+
android:entryValues="@array/audio_filter_values"
61+
android:key="preview_audio_filter"
62+
android:title="@string/host_recorder_settings_audio_filter"
63+
app:iconSpaceReserved="false"
64+
app:useSimpleSummaryProvider="true" />
65+
66+
<org.deviceconnect.android.deviceplugin.host.activity.fragment.SeekBarDialogPreference
67+
android:defaultValue="10"
68+
android:key="preview_audio_coefficient"
69+
android:singleLine="true"
70+
android:title="@string/host_recorder_settings_audio_coefficient"
71+
app:iconSpaceReserved="false"
72+
app:useSimpleSummaryProvider="true" />
5773
</PreferenceCategory>
5874

5975
</PreferenceScreen>

0 commit comments

Comments
 (0)