Day1 初识AndroidAudio
今日目标
- 搭建Android Audio开发环境
- 理解音频基础概念
- 实现第一个音频播放/录制Demo
- 了解车载音频的特殊性
上午:环境搭建与理论学习
步骤1:开发环境配置
- 安装Android Studio(最新稳定版)
- 创建新项目(选择Kotlin语言,Minimum SDK API 21+)
- 连接测试设备:
- 使用手机(推荐Android 10+)
- 或配置Android Automotive模拟器(官方教程)
步骤2:核心概念学习
- 必读文档:
- Android Audio概览(精读前3节)
- 理解关键术语:
- AudioTrack(播放) vs AudioRecord(录制)
- Stream Type(STREAM_MUSIC/STREAM_NAVIGATION)
- Audio Focus(多应用音频抢占机制)
- 车载场景关联:
- 思考:当导航语音播报时,音乐应用该如何响应?(记录疑问)
步骤3:音频格式认知
- 用Audacity软件(下载)生成测试音频:
- 创建1kHz正弦波WAV文件(采样率44.1kHz,16bit PCM)
- 对比MP3与WAV文件大小/频谱差异(理解有损vs无损压缩)
步骤4:实现基础音频播放
package com.example.myapplicationimport android.media.AudioFormat
import android.media.AudioManager
import android.media.AudioTrack
import kotlin.math.PI
import kotlin.math.sinclass AudioPlayer {private var audioTrack: AudioTrack? = nullprivate var isPaused = falsefun play(sampleRate: Int = 44100, duration: Int = 5, frequency: Double = 440.0) {try {if (isPaused) {audioTrack?.play()isPaused = falsereturn}val numSamples = sampleRate * durationval sample = ShortArray(numSamples)for (i in 0 until numSamples) {val angle = 2.0 * PI * frequency * i / sampleRateval value = (sin(angle) * Short.MAX_VALUE).toInt()sample[i] = value.toShort()}val minBufferSize = AudioTrack.getMinBufferSize(sampleRate,AudioFormat.CHANNEL_OUT_MONO,AudioFormat.ENCODING_PCM_16BIT)audioTrack = AudioTrack(AudioManager.STREAM_MUSIC,sampleRate,AudioFormat.CHANNEL_OUT_MONO,AudioFormat.ENCODING_PCM_16BIT,minBufferSize,AudioTrack.MODE_STREAM)if (audioTrack?.state != AudioTrack.STATE_INITIALIZED) {throw IllegalStateException("AudioTrack 初始化失败")}audioTrack?.play()val bufferSize = 1024for (i in 0 until numSamples step bufferSize) {val length = if (i + bufferSize > numSamples) numSamples - i else bufferSizeaudioTrack?.write(sample, i, length)}} catch (e: Exception) {e.printStackTrace()}}fun stop() {try {audioTrack?.stop()audioTrack?.release()audioTrack = nullisPaused = false} catch (e: Exception) {e.printStackTrace()}}fun pause() {try {audioTrack?.pause()isPaused = true} catch (e: Exception) {e.printStackTrace()}}
}
步骤5:实现简单录音
package com.example.myapplicationimport android.content.Context
import android.media.AudioFormat
import android.media.AudioRecord
import android.media.MediaRecorder
import android.os.Build
import android.os.Environment
import java.io.File
import java.io.FileOutputStream
import java.io.IOExceptionclass AudioRecorder(private val context: Context) {private var audioRecord: AudioRecord? = nullprivate var isRecording = falseprivate var recordingThread: Thread? = null// 采样率private val sampleRate = 44100// 声道配置,单声道private val channelConfig = AudioFormat.CHANNEL_IN_MONO// 音频编码格式,16 位 PCMprivate val audioFormat = AudioFormat.ENCODING_PCM_16BIT// 缓冲区大小private val bufferSize = AudioRecord.getMinBufferSize(sampleRate, channelConfig, audioFormat)/*** 开始录音* @param filePath 录音文件保存的路径*/fun startRecording(filePath: String) {try {audioRecord = AudioRecord(MediaRecorder.AudioSource.MIC,sampleRate,channelConfig,audioFormat,bufferSize)audioRecord?.let {it.startRecording()isRecording = truerecordingThread = Thread {val data = ByteArray(bufferSize)val file = getOutputFile(filePath)val outputStream = FileOutputStream(file)try {while (isRecording) {val readSize = it.read(data, 0, bufferSize)if (readSize > 0) {outputStream.write(data, 0, readSize)}}} catch (e: IOException) {e.printStackTrace()} finally {try {outputStream.close()} catch (e: IOException) {e.printStackTrace()}}}recordingThread?.start()}} catch (e: Exception) {e.printStackTrace()}}/*** 停止录音*/fun stopRecording() {isRecording = falseaudioRecord?.let {if (it.recordingState == AudioRecord.RECORDSTATE_RECORDING) {it.stop()}it.release()audioRecord = null}recordingThread?.join()recordingThread = null}/*** 根据传入的文件名获取输出文件* @param fileName 文件名* @return 输出文件对象*/private fun getOutputFile(fileName: String): File {return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {// Android 10 及以上使用应用专属外部存储目录val storageDir = context.getExternalFilesDir(Environment.DIRECTORY_MUSIC)if (!storageDir?.exists()!!) {storageDir.mkdirs()}File(storageDir, fileName)} else {// Android 9 及以下使用传统外部存储路径val storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC)if (!storageDir.exists()) {storageDir.mkdirs()}File(storageDir, fileName)}}
}
⚠️ 音频资源加载:
- 避免直接将大文件放入
res/raw
(可能OOM),生产环境应使用文件流逐步读取 - WAV文件需确保无压缩(PCM格式),否则AudioTrack可能无法直接播放
⚠️ 延迟优化预知:
- 今日使用的AudioTrack默认模式为
MODE_STREAM
,后续学习会对比MODE_STATIC
模式差异
学习成果检验
✅ 成功播放自定义生成的测试音频
✅ 录制并保存PCM原始数据文件(可用Audacity导入验证)
✅ 初步感知车载导航类音频的特殊处理逻辑
音频格式对比表格
格式类型 | 编码方式 | 是否压缩 | 文件大小 | 音质损失 | 延迟要求 | 典型应用场景 | 车载开发注意事项 |
---|---|---|---|---|---|---|---|
WAV | PCM无损 | 否 | 大 | 无 | 低 | 原始音频录制/播放 | 优先用于低延迟实时音频 |
MP3 | 有损压缩 | 是 | 小 | 明显 | 中 | 音乐存储/流媒体 | 避免用于需要精确控制的场景 |
AAC | 有损压缩 | 是 | 较少 | 较少 | 中 | 蓝牙音频传输 | 需处理编解码延迟问题 |
FLAC | 无损压缩 | 是 | 中等 | 无 | 高 | 高保真音乐存储 | 车载存储空间充足时使用 |
OPUS | 有损/无损/可选择 | 是 | 可变 | 可调 | 极低 | 实时语音传输/VoIP | 适合车载通话降噪系统 |
AMR | 有损 | 是 | 极小 | 严重 | 低 | 语音录制(如电话录音) | 仅限语音场景,不推荐音乐 |
关键参数详解
- 编码方式
- PCM(脉冲编码调制):原始音频数据,Android AudioTrack可直接处理
- 压缩编码(如MP3/AAC):需通过
MediaPlayer
或MediaCodec
解码
- 是否压缩
- 无损压缩(FLAC):保留全部音质,但解码消耗资源
- 有损压缩(MP3):牺牲音质换取体积减小
- 车载开发注意事项
- 低延迟要求:车载语音控制需优先选择WAV/OPUS
- 存储限制:导航提示音可使用高压缩比的AAC
- 硬件兼容性:部分车机芯片对特定格式(如OPUS)支持有限
-
直接播放PCM数据(适合WAV):
// 使用AudioTrack播放原始PCM数据 audioTrack.write(pcmData, 0, pcmData.size)
-
解码压缩格式(如MP3/AAC):
// 使用MediaPlayer解码 mediaPlayer.setDataSource("audio.mp3") mediaPlayer.prepare() mediaPlayer.start()
-
实时编码(如语音传输):
// 使用MediaCodec进行OPUS编码 val codec = MediaCodec.createEncoderByType("audio/opus") codec.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE)
车载场景选择建议
- 导航提示音:优先使用WAV(低延迟)
- 蓝牙音乐传输:强制使用AAC/SBC(协议限制)
- 多声道环绕声:必须用PCM或FLAC(保留空间信息)
- 语音助手交互:推荐OPUS(网络传输友好)
相关文章:
Day1 初识AndroidAudio
今日目标 搭建Android Audio开发环境理解音频基础概念实现第一个音频播放/录制Demo了解车载音频的特殊性 上午:环境搭建与理论学习 步骤1:开发环境配置 安装Android Studio(最新稳定版)创建新项目(选择Kotlin语言&a…...
2025保险与金融领域实战全解析:DeepSeek赋能细分领域深度指南(附全流程案例)
🚀 2025保险与金融领域实战全解析:DeepSeek赋能细分领域深度指南(附全流程案例)🚀 📚 目录 DeepSeek在保险与金融中的核心价值保险领域:从风险建模到产品创新金融领域:从投资分析到财富管理区块链与联邦学习的应用探索客户关系与私域运营:全球化体验升级工具与资源…...
YARN的工作机制及特性总结
YARN hadoop的资源管理调度平台(集群)——为用户程序提供运算资源的管理和调度 用户程序:如用户开发的一个MR程序 YARN有两类节点(服务进程): 1. resourcemanager 主节点master ----只需要1个来工作 2. nod…...
财务运营域——营收稽核系统设计
摘要 本文主要介绍了营收稽核系统的背景、特点与作用。营收稽核系统的产生源于营收管理复杂性、财务合规与审计需求、提升数据透明度与决策效率、防范舞弊与风险管理、技术进步与自动化需求、多元化业务模式以及跨部门协作与数据整合等多方面因素。其特点包括自动化与智能化、…...
22.回溯算法4
递增子序列 这里不能排序,因为数组的顺序是对结果有影响的,所以只能通过used数组来去重 class Solution { public:vector<int> path;vector<vector<int>> res;void backtracking(vector<int>& nums,int start){if(path.si…...
C#上位机--跳转语句
在 C# 编程中,跳转语句用于改变程序的执行流程。这些语句允许程序从当前位置跳转到其他位置,从而实现特定的逻辑控制。本文将详细介绍 C# 中四种常见的跳转语句:GOTO、Break、Continue 和 Return,并通过具体的示例代码来展示它们的…...
百度文心一言API-Python版(完整代码)
大家好啊!我是NiJiMingCheng 我的博客:NiJiMingCheng 上一节我们分享了实现AI智能回复微信的内容,这一节我们来探索其中需要的百度文心一言,本文详细介绍了我们从注册账号到实现百度文心一言智能回复,同时多种模型自行…...
Prompt:创造性的系统分析者
分享的提示词: 你是一个创造性的系统分析者,作为咨询师,你具有以下特质: 基础能力: 深入理解我的系统性模式 识别模式间的隐藏联系 发现出人意料的关联 提供令人惊讶的洞见 工作方式: 在每次回应中至少…...
单机上使用docker搭建minio集群
单机上使用docker搭建minio集群 1.集群安装1.1前提条件1.2步骤指南1.2.1安装 Docker 和 Docker Compose(如果尚未安装)1.2.2编写docker-compose文件1.2.3启动1.2.4访问 2.使用2.1 mc客户端安装2.2创建一个连接2.3简单使用下 这里在ubuntu上单机安装一个m…...
Bash Shell控制台终端命令合集
最近整理了一下Bash Shell终端的命令,以备后续查用。如下: 1.内建命令 命令描述&在后台启动作业((x))执行数学表达式x.在当前shell中读取并执行指定文件中的命令:什么都不做,始终成功退出[ t ]对条件表达式t进行求值[[ e ]]对条件表达式e进行求值alias为指定的命令定义…...
垂类大模型微调(一):认识LLaMA-Factory
LlamaFactory 是一个专注于 高效微调大型语言模型(LLMs) 的开源工具框架,尤其以支持 LLaMA(Meta 的大型语言模型系列)及其衍生模型(如 Chinese-LLaMA、Alpaca 等)而闻名。它的目标是简化模型微调流程,降低用户使用门槛; 官方文档 一、介绍 高效微调支持 支持多种微调…...
QString是 Qt 框架中的一个核心类,基本用法使用:创建、字符串拼接、截取、查找、替换、分割、大小写转换、比较。
QString 是 Qt 框架中的一个核心类,用于处理字符串数据。它提供了许多功能来处理文本操作,包括但不限于字符串拼接、分割、大小写转换等。下面是一些 QString 的常见用法示例: 创建 QString 你可以通过多种方式创建 QString 对象࿱…...
彻底卸载kubeadm安装的k8s集群
目录 一、删除资源 二、停止k8s服务 三、重置集群 四、卸载k8s安装包 五、清理残留文件和目录 六、删除k8s相关镜像 七、重启服务器 一、删除资源 # 删除集群中的所有资源,包括 Pod、Deployment、Service,任意节点执行 kubectl delete --all pod…...
边缘安全加速(ESA)套餐
为帮助不同规模和需求的企业选择合适的解决方案,边缘安全加速(ESA)提供了多种套餐。以下是四种主要套餐的介绍,每个套餐都根据企业需求提供不同的功能和服务水平,从基础安全保护到企业级的全面防护与加速。 1. 各版本详…...
MySQL主从服务器配置教程
文章目录 前言一、环境准备1. 服务器信息2. 安装 MySQL3. 初始化 MySQL4. Navicat查看 MySQL 服务器 二、主服务器(Master)配置1. 编辑 MySQL 配置文件2. 创建用于复制的用户3. 获取二进制日志信息 三、从服务器(Slave)配置1. 编辑…...
机器学习实战(7):聚类算法——发现数据中的隐藏模式
第7集:聚类算法——发现数据中的隐藏模式 在机器学习中,聚类(Clustering) 是一种无监督学习方法,用于发现数据中的隐藏模式或分组。与分类任务不同,聚类不需要标签,而是根据数据的相似性将其划…...
Visual Studio中打开多个项目
1) 找到解决方案窗口 2) 右键添加→ 选择现有项目 3) 选择.vcxproj文件打开即可...
springcloud gateway并发量多大
Spring Cloud Gateway的并发量并非固定值,它受到多种因素的影响,包括但不限于网关配置、硬件资源(如CPU、内存、网络带宽等)、后端服务的处理能力以及系统整体的架构设计。因此,要准确回答Spring Cloud Gateway的并发量…...
抓包工具 wireshark
1.什么是抓包工具 抓包工具是什么?-CSDN博客 2.wireshark的安装 【抓包工具】win 10 / win 11:WireShark 下载、安装、使用_windows抓包工具-CSDN博客 3.wireshark的基础操作 Wireshark零基础使用教程(超详细) - 元宇宙-Meta…...
git从本地其他设备上fetch分支
在 Git 中,如果你想从本地其他设备上获取分支,可以通过以下几种方式实现。不过,需要注意的是,Git 本身是分布式版本控制系统,通常我们是从远程仓库(如 GitHub、GitLab 等)拉取分支,而…...
Ubuntu:wvp-GB28181-pro安装、运行
参考 https://doc.wvp-pro.cn 下载源码 GitHub - 648540858/wvp-GB28181-pro: WEB VIDEO PLATFORM是一个基于GB28181-2016标准实现的网络视频平台,支持NAT穿透,支持海康、大华、宇视等品牌的IPC、NVR、DVR接入。支持国标级联,支持rtsp/rtm…...
docker中常用的命令
一、服务命令 systemctl start docker.service 启动docker服务 systemctl stop docker.service 关闭docker服务 systemctl enable docker.service 设置docker服务开机启动 systemctl disable docker.service .禁止docker服务开机自启动 二、镜像命令 d…...
如何实现使用DeepSeek的CV模型对管道内模糊、低光照或水渍干扰的图像进行去噪、超分辨率重建。...
要使用 DeepSeek 的 CV 模型对管道内模糊、低光照或水渍干扰的图像进行去噪、超分辨率重建,一般可以按照以下步骤实现: 1. 准备工作 1.1 获取 API 访问权限 首先,你需要从 DeepSeek 官方获取 API 访问权限和相应的 API 密钥。这通常需要在 De…...
Android 串口通信
引言 在iot项目中,Android 端总会有和硬件通信。 通信这里:串口通信,蓝牙通信或者局域网通信。 这里讲一下串口通信。 什么是串口? “串口”(Serial Port)通常是指一种用于与外部设备进行串行通信的接口。…...
智联招聘爬虫
使用Python和Selenium进行招聘信息爬取 在当今数字化时代,数据已成为企业决策的重要依据。对于人力资源部门或求职者而言,获取最新的招聘信息至关重要。然而,手动浏览和收集招聘信息不仅耗时费力,而且效率低下。为了解决这个问题&…...
frameworks 之 Focus window
frameworks 之 Focus window 1 查看当前焦点窗口1.1 dump window1.2 dump input1.3 input Events 日志1.4 dump SurfaceFlinger1.5 查看关键的日志 2 更新当前焦点应用3 更新当前焦点窗口3.1 焦点丢失3.2 获得窗口焦点 4 窗口信息到InputDispatcher4.1 焦点应用通知InputDispat…...
危害被低估的Netgear认证前漏洞CVE-2019-20760分析
概述 Netgear R9000设备2019年爆出认证绕过漏洞CVE-2019-20760,题目之所以说这个漏洞远被低估,主要以下两个原因: 实际漏洞危害较大,公开信息仅显示该漏洞为一个认证绕过漏洞,没有具体漏洞信息或者POC,但…...
微软量子芯片引领人工智能革命,开启计算新纪元
摘要:微软近日发布了具有里程碑意义的量子芯片,这一突破性技术不仅为量子计算带来了新的可能性,更为人工智能领域带来了前所未有的发展机遇。本文将探讨微软量子芯片如何与人工智能相结合,以及它对未来计算世界的深远影响。 一、…...
PHP2(WEB)
##解题思路 打开页面什么线索都没有,目录扫描只是扫出来一个index.php,而源代码没有东西,且/robots.txt是不允许访问的 于是一番查询后发现,有个index.phps的文件路径,里头写着一段php的逻辑,对url的id参数…...
Linux 下 VIM 编辑器学习记录:从基础到进阶(中)
在 Linux 系统的学习与实践过程中,对文件内容的查看是一项极为基础且高频的操作。熟练掌握各类内容查看命令,不仅能提升我们在 Linux 环境下的工作效率,对于学习 Java 全栈开发的同学来说,在处理项目相关的配置文件、日志文件时也…...
使用Python进行PDF隐私信息检测
在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要。本文将介绍如何使用Python及其相关库来检测PDF文件中的隐私信息,如姓名、身份证号、手机号和邮箱等。 C:\pythoncode\new\checkp…...
【Python爬虫(45)】Python爬虫新境界:分布式与大数据框架的融合之旅
【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取ÿ…...
网络安全科普系统开发与设计(springboot论文源码调试讲解)
第4章 总体设计 4.1系统目标 本系统旨在达到科普知识信息展示、案例分析信息查询、试题信息添加、评论、答题管理、信息分类等为一体,为用户和管理员提供服务。使管理员更加轻松的进行工作,使用户更加快速的解决自己的问题。本系统的设计界面丰富&#…...
前后端对接
前端与后端的对接主要通过 接口 进行数据交互,具体流程和方式如下: 1. 明确需求与接口定义 前后端协商:确定需要哪些接口、接口的功能、请求参数和返回格式。接口文档:使用工具(如 Swagger、Postman、Apifoxÿ…...
深入浅出 SQLSugar:快速掌握高效 .NET ORM 框架
SQLSugar 是一个高效、易用的 .NET ORM 框架,支持多种数据库(如 SQL Server、MySQL、PostgreSQL 等)。它提供了丰富的功能,包括 CRUD 操作、事务管理、动态表名、多表联查等,开发者可以通过简单的链式操作实现复杂的数…...
计算机专业知识【深入理解子网中的特殊地址:为何 192.168.0.1 和 192.168.0.255 不能随意分配】
在计算机网络的世界里,IP 地址是设备进行通信的关键标识。对于常见的子网,如 192.168.0.0/24,我们可能会疑惑为何某些地址不能分配给主机使用。接下来,我们就以 192.168.0.0/24 为例,详细解释为何 192.168.0.1 和 192.…...
网络安全与措施
🍅 点击文末小卡片 ,免费获取网络安全全套资料,资料在手,涨薪更快 # 网络安全问题概述 1) 数据安全 访问(授权访问);存储(容灾、备份或异地备份等) 2) 应用程序 不能…...
复刻Dummy机械臂保姆教程
一直想复刻稚晖君的Dummy机械臂,24年11月底终于开始行动,上网学习、材料准备、组装调试前后耗时1个多月,终于在春节前顺利完工,正好用它给大家拜个年。很多同学在咨询细节,这里就整理一份保姆式教程,其中学…...
|网络安全|网络安全学习方法
1、先网络后安全 很多初学者还没搞定网络看懂网络拓扑,就急着研究防火墙或VPN,其实这样就不清楚整个网络架构是如何安全演进的。正确的流程是:先通过网络协议和拓扑设计的学习,能独立搭建一个企业网/校园网,再引入局域…...
内外网隔离文件传输解决方案|系统与钉钉集成+等保合规,安全提升70%
一、背景与痛点 在内外网隔离的企业网络环境中,员工与外部协作伙伴(如钉钉用户)的文件传输面临以下挑战: 1. **安全性风险**:内外网直连可能导致病毒传播、数据泄露。 2. **操作繁琐**:传统方式需频繁切…...
EasyRTC:轻量化SDK赋能嵌入式设备,开启智能硬件音视频通讯新篇章
在智能硬件与物联网飞速发展的今天,嵌入式设备的音视频通讯能力正变得愈发重要。然而,受限于硬件资源,尤其是Flash存储空间的不足,传统音视频通讯方案往往难以在嵌入式设备上实现高效集成。EasyRTC凭借其轻量级SDK和先进的技术架构…...
如何使用3D高斯分布进行环境建模
使用3D高斯分布来实现建模,主要是通过高斯分布的概率特性来描述空间中每个点的几何位置和不确定性。具体来说,3D高斯分布被用来表示点云数据中的每一个点或体素(voxel)的空间分布和不确定性,而不是单纯地存储每个点的坐…...
Java 大视界 -- 总结与展望:Java 大数据领域的新征程与无限可能(96)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
从零开始:VirtualBox安装Ubuntu 24.04.1 LTS
博客系列:Ubuntu虚拟机搭建与Python开发环境配置全攻略 第一篇:从零开始:VirtualBox安装Ubuntu 24.04.1 LTS(当前)第二篇:解决VirtualBox卡顿问题:配置优化和常见错误排查第三篇:轻…...
使用大语言模型(Deepseek)构建一个基于 SQL 数据的问答系统
GitHub代码仓库 架构 从高层次来看,这些系统的步骤如下: 将问题转换为SQL查询:模型将用户输入转换为SQL查询。 执行SQL查询:执行查询。 回答问题:模型根据查询结果响应用户输入。 样本数据 下载样本数据…...
记录此刻:历时两月,初步实现基于FPGA的NVMe SSD固态硬盘存储控制器设计!
背景 为满足实验室横向项目需求,在2024年12月中下旬导师提出基于FPGA的NVMe SSD控制器研发项目。项目核心目标为:通过PCIe 3.0 x4接口实现单盘3000MB/s的持续读取速率。 实现过程 调研 花了半个月的时间查阅了一些使用FPGA实现NVME SSD控制器的论文、…...
【mysql】核心参数,SHOW VARIABLES
核心参数分类解析 SET GLOBAL slow_query_log = ON; 修改参数设置 一、核心参数分类解析 1. 连接和线程配置 max_connections (200):允许的最大并发连接数,超过会拒绝新连接。 wait_timeout (28800秒):非交互式连接的空闲超时时间(默认8小时)。 interactive_timeout (…...
centOS 7.9 安装JDK MYSQL
jdk: Java Archive Downloads - Java SE 17.0.12 and earlier CentOS安装JDK17教程(完整版) - 秦胜飞 - 博客园 sudo yum update wget https://download.oracle.com/java/17/archive/jdk-17.0.3.1_linux-x64_bin.rpm yum install ./jdk-17.0.3.1_linux…...
【OS安装与使用】part5-ubuntu22.04基于conda安装pytorch+tensorflow
文章目录 一、待解决问题1.1 问题描述1.2 解决方法 二、方法详述2.1 必要说明2.2 应用步骤2.2.1 明确pytorch安装依赖2.2.2 conda创建虚拟环境2.2.3 安装pytorch2.2.4 验证pytorch安装2.2.5 安装Tensorflow2.2.6 验证Tensorflow安装 三、疑问四、总结 一、待解决问题 1.1 问题…...
SVM 支持向量机
Owner: 潘达斯奈基 #数据科学/机器学习/SVM 一 支持向量机简介 支持向量机(Support Vector Machine, SVM)是一个二元分类算法,是对感知器算法模型的一种拓展,现在的SVM算法支持线性分类和非线性分类应用,…...